首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >STM32在目标停止时切换PIN码

STM32在目标停止时切换PIN码
EN

Stack Overflow用户
提问于 2017-10-04 20:16:52
回答 1查看 539关注 0票数 2

我使用的是STM32F7系列的微控制器,如果能改变一些GPIO的值(切换、脉冲、高z等),那将是最有帮助的。每当内核被附加到JTAG接口的调试器停止时。有没有人知道有这样一个特性?

EN

回答 1

Stack Overflow用户

发布于 2017-10-05 17:07:38

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

这个想法是想办法让一个定时器在运行时输出一个低电平信号,在不运行时输出一个高电平信号。单个定时器不能做到这一点,但在主从配置中有两个定时器是可能的。

配置TIM3输出一个占空比非常高的脉宽调制信号,在两个周期内从低开始,然后在其65536个周期长周期的其余时间内变为高电平。将其从属于以2周期运行的TIM2,并在计数器溢出时重置TIM3。因此,只要TIM2正在运行,TIM3就会被强制为永久低电平,但当TIM2停止时,它将输出99.997%高的脉宽调制信号。然后,将TIM2配置为在调试器停止内核时停止,但TIM3继续运行。

代码语言:javascript
运行
复制
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上有一个发光二极管,这是TIM3通道3。当我点击调试器中的暂停按钮时,发光二极管亮得很好,低电平脉冲用肉眼根本看不到。应用外部low pass RC filter,使其在干扰连接到的任何组件时消失。也许可以使用高级定时器TIM1TIM8的可重新触发的单脉冲模式输出干净的信号,但我没有任何经验。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46564675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档