目标停止时STM32切换引脚

目标停止时STM32切换引脚,stm32,stm32f7,Stm32,Stm32f7,我使用的是STM32F7系列微控制器,当内核被连接到JTAG接口的调试器停止时,有一些GPIO更改值(切换、脉冲、高z…)将非常有用。有人知道这样的特征吗 有DBGMCU寄存器,当内核停止时,这些寄存器可以选择性地停止某些外围设备(主要是定时器) 这样做的目的是让计时器在运行时输出低电平信号,在不运行时输出高电平信号。一个定时器不能做到这一点,但在主从配置中使用两个定时器是可能的 配置TIM3以输出一个占空比非常高的PWM信号,在两个周期内从低开始,然后在65536个周期的剩余周期内变高。从它到

我使用的是STM32F7系列微控制器,当内核被连接到JTAG接口的调试器停止时,有一些GPIO更改值(切换、脉冲、高z…)将非常有用。有人知道这样的特征吗

DBGMCU
寄存器,当内核停止时,这些寄存器可以选择性地停止某些外围设备(主要是定时器)

这样做的目的是让计时器在运行时输出低电平信号,在不运行时输出高电平信号。一个定时器不能做到这一点,但在主从配置中使用两个定时器是可能的

配置
TIM3
以输出一个占空比非常高的PWM信号,在两个周期内从低开始,然后在65536个周期的剩余周期内变高。从它到
TIM2
,以2个周期运行,并在计数器溢出时重置
TIM3
。因此,只要
TIM2
运行,
TIM3
就被强制始终处于低位,但当
TIM2
停止时,它将输出99.997%的高PWM信号。然后将
TIM2
配置为在调试器停止内核时停止,但
TIM3
保持运行

RCC->AHBENR |= RCC_AHBENR_GPIOBEN; // enable peripheral clocks, that might be different on your board
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN | RCC_APB1ENR_TIM3EN;

// consult your datasheet for the right AF value
GPIOB->AFR[0] = (GPIOB->AFR[0] & ~GPIO_AFRL_AFRL0) | 2; // set PB0 to Alternate Function 2, TIM3
GPIOB->MODER = (GPIOB->MODER & ~GPIO_MODER_MODER0) | GPIO_MODER_MODER0_1; // set PB0 to Alternate Function

DBGMCU->APB1FZ |= DBGMCU_APB1_FZ_DBG_TIM2_STOP; // stop TIM2 when core is stopped
DBGMCU->APB1FZ &= ~DBGMCU_APB1_FZ_DBG_TIM3_STOP; // but don't stop TIM3

TIM2->ARR = 1;                  // master timer period
TIM2->CR2 = TIM_CR2_MMS_1;      // master mode selection MMS=010 Update event
TIM2->CR1 = TIM_CR1_CEN;        // enable timer 2

TIM3->ARR = 65535;              // PWM period
TIM3->CCR3 = 2;                 // channel 3 PWM duty cycle
TIM3->CCMR2 = TIM_CCMR2_OC3M;   // set channel 3 to PWM mode 2
TIM3->CCER = TIM_CCER_CC3E      // enable channel 3 compare output
        /* | TIM_CCER_CC3P */;  // it's possible to invert output polarity
TIM3->SMCR = TIM_SMCR_TS_0      // trigger selection TS=001 ITR1 = TIM2 is master
        | TIM_SMCR_SMS_2;       // slave mode SMS=100 reset mode
TIM3->CR1 = TIM_CR1_CEN;        // enable timer 3

我没有F7,它运行在我的
STM32L151
板上,碰巧PB0上有一个LED,即
TIM3
通道3。当我点击调试器中的suspend按钮时,LED亮得很好,低脉冲对肉眼根本不可见。应用一个外部命令,使其在连接到任何组件时消失。可以使用高级定时器的可再触发单脉冲模式
TIM1
TIM8
输出干净的信号,但我没有这方面的经验。

IMO这是不可能的,因为停止堆芯不应改变uC的状态。也许有些探测器有一个管脚发出信号,但我不知道。这项任务有两个定时器(包括珍贵的32位tim2),这太过分了。它当然可以与任何可能的主从定时器对一起工作。但我不明白为什么?为了在多处理器环境中停止另一个微型计算机,jtag有着特殊的机制,可能是某个愚蠢的组件,当控制器无法监控它时,它会变得太热或移动得太远。