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