STM32关闭PWM输出时,让IO输出固定高或低电平的方法。

看到有很多人在网上询问停止PWM时如何获取固定输出,记录在此供参考。
方法1: 设置占空比为0xffff 或0 后即可得到想要的0或1输出。
方法2 : 配置回通用IO口,再设置为0或1.
以上两种方法是网上铺天盖地搜到的方法,但是很多时候我们占空比不方便修改,需要保持固定的占空比,只是想让PWM输出或不输出时可以用下面介绍的方法。
方法3:
以TIM14的CHI为例
/* 设置GPIO 强制输出0 /
TIM_SelectOCxM(TIM14,TIM_Channel_1,TIM_ForcedAction_InActive);
TIM_CCxCmd(TIM14,TIM_Channel_1,TIM_CCx_Enable);
/
设置GPIO 强制输出1 */
TIM_SelectOCxM(TIM14,TIM_Channel_1,TIM_ForcedAction_Active);
TIM_CCxCmd(TIM14,TIM_Channel_1,TIM_CCx_Enable);
以上就可以让PWM IO直接输出0 或1。

/* 恢复原来的占空比PWM输出 */
TIM_SelectOCxM(TIM14,TIM_Channel_1,TIM_OCMode_PWM1);
TIM_CCxCmd(TIM14,TIM_Channel_1,TIM_CCx_Enable);

  • 13
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用STM32的定器模块和PWM功能,可以通过无源蜂鸣器实现哆瑞咪发嗦啦西以及简单歌曲的输出。 首先,需要设置定器的工作模式为PWM模式,并选择合适的频率和占空比。然后,连接蜂鸣器到MCU的IO口上,并将IO口配置为PWM输出功能。接下来,根据需要输出的哆瑞咪发嗦啦西的频率和音长,设置定器的预分频和重装载值。 对于简单的歌曲,可以将每个音符的频率和长存储在一个数组中。使用定器中断,每次定器触发,更新数组索引的值,并根据索引值设置定器的重装载值,即实现频率和长的切换。 例如,假设要输出哆瑞咪发嗦啦西的音符,可以使用以下代码: ```c #include "stm32f10x.h" uint16_t notes[] = { 523, 587, 659, 698, 784, 880, 988, 1046 }; // 哆瑞咪发嗦啦西的频率数组,依次对应"Do", "Re", "Mi", "Fa", "So", "La", "Si", "Do" uint8_t length[] = { 4, 4, 4, 4, 4, 4, 4, 8 }; // 哆瑞咪发嗦啦西的长数组,对应每个音符的拍数 uint16_t note_index = 0; // 当前音符索引 void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); uint16_t freq = notes[note_index]; uint16_t duration = length[note_index]; TIM_SetAutoreload(TIM2, SystemCoreClock / freq); // 设置PWM频率 TIM_SetCounter(TIM2, 0); // 重置定器计数器 TIM_CtrlPWMOutputs(TIM2, ENABLE); // 使能PWM输出 GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); // 设置IO输出电平,开启蜂鸣器发声 // 根据音符长控制发声间 for (uint16_t i = 0; i < duration; i++) { Delay_ms(250); // 这里使用延函数控制音符的持续间 } TIM_CtrlPWMOutputs(TIM2, DISABLE); // 关闭PWM输出 GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); // 设置IO输出低电平关闭蜂鸣器发声 note_index++; // 音符索引加1 if (note_index >= sizeof(notes) / sizeof(notes[0])) { note_index = 0; // 重置音符索引,重新播放 } } } int main(void) { // 初始化定器和GPIO // 设置定器参数为PWM模式 // 设置IO口为PWM输出 // 配置定器中断,并开启中断 // 启动定器 while (1) { // 主循环 } } ``` 以上代码实现了根据数组中存储的频率和长来控制蜂鸣器发声的功能。定器触发定器中断后,根据音符索引从数组中读取频率和长,并设置定器的预分频和重装载值,控制蜂鸣器的发声间。最后,音符索引自增,以实现连续播放的效果。 需要注意的是,以上代码仅为示例,具体实现可能会根据硬件平台和所使用的STM32库函数有所不同,还需根据具体情况进行相应的配置和更改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值