STM32利用定时器1的通道1输出PWM波
注:本程序基于正点原子的第33讲PWM输出
![0cf6d81cc59a1f92c4f33b3f7acad0dd.png](https://img-blog.csdnimg.cn/img_convert/0cf6d81cc59a1f92c4f33b3f7acad0dd.png)
![38a9ca1a6ec401856a04bb14bf5f46e1.png](https://img-blog.csdnimg.cn/img_convert/38a9ca1a6ec401856a04bb14bf5f46e1.png)
pwm.h文件下的代码:
#ifndef __PWM_H
#define __PWM_H
#include "sys.h"
void TIM1_PWM_Init(u16 arr,u16 psc);
#endif
pwm.c文件下的代码:
#include
过程中遇到的问题:
这句话//TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_Active);不能有,有这句软件仿真结果就一直是高电平。
使用此函数:TIM_ForcedOC1Config(TIM1, TIM_ForcedAction_InActive);可以将定时器端口强制置为低电平,但是PWM开启时使用TIM_ForcedOC1Config(TIM12, TIM_ForcedAction_Active);PWM就无效了。
主函数main.c的代码:
#include
软件仿真
![aabea1447e585318915fc1a89ae70827.png](https://img-blog.csdnimg.cn/img_convert/aabea1447e585318915fc1a89ae70827.png)
![076cc2bc3e30e0a6e1c798c53c5c8d75.png](https://img-blog.csdnimg.cn/img_convert/076cc2bc3e30e0a6e1c798c53c5c8d75.png)
![c7609543cb7322264b71d6b776062069.png](https://img-blog.csdnimg.cn/img_convert/c7609543cb7322264b71d6b776062069.png)
![4152c7e4909d82d95ba6745b6b58ec8f.png](https://img-blog.csdnimg.cn/img_convert/4152c7e4909d82d95ba6745b6b58ec8f.png)
![1fb34ba30941fd62486892d9b5bb05a2.png](https://img-blog.csdnimg.cn/img_convert/1fb34ba30941fd62486892d9b5bb05a2.png)
![443c0f2501d643db17dc41ab9a91353f.png](https://img-blog.csdnimg.cn/img_convert/443c0f2501d643db17dc41ab9a91353f.png)
![d9144deb613cb715c4278194dc60cbb7.png](https://img-blog.csdnimg.cn/img_convert/d9144deb613cb715c4278194dc60cbb7.png)
这里要选择:周期性刷新逻辑分析仪屏幕,才能显示波形
![428058c880068c89344aa9efbe361f30.png](https://img-blog.csdnimg.cn/img_convert/428058c880068c89344aa9efbe361f30.png)
![c82d90f052197c2574515557d530829a.png](https://img-blog.csdnimg.cn/img_convert/c82d90f052197c2574515557d530829a.png)
![3f3148a0f5852ebb90b8726a6a19dce2.png](https://img-blog.csdnimg.cn/img_convert/3f3148a0f5852ebb90b8726a6a19dce2.png)
观察得到是1MHz的方波
频率的计算:
![ba53473729b196f533b96a77e05342f7.png](https://img-blog.csdnimg.cn/img_convert/ba53473729b196f533b96a77e05342f7.png)
频率设置的相关参数:
(1)TIM_TimeBaseStructure.TIM_Period ====== ARR
(2)TIM_TimeBaseStructure.TIM_Prescaler ======PSC
(3)TIM_OCInitStructure.TIM_Pulse ====== (ARR+1)/2 ------>占空比为50%
这里TIM_Pulse是设置占空比的
这里:(ARR+1)*(PSC+1) = 72MHz/1MHz =72000000/1000000 =72
(ARR+1)(PSC+1) = 72 = 8*9 → ARR = 7 , PSC = 8,
设置占空比为50%,则TIM_Pulse=(ARR+1)/2 = (7+1)/2 = 4