STM32微控制器综合实训8 PWM输出实验

本文详细介绍了STM32微控制器的PWM输出实验,包括main.c和timer.c的代码讲解,以及四次仿真实验的过程。在实验中,通过调整PWM参数实现了不同占空比的效果,解决了编译过程中遇到的未定义符号错误,最后进行了总结。
摘要由CSDN通过智能技术生成
实验8 PWM输出实验
用STM32的定时器来产生PWM呼吸灯。

代码讲解

main.c

int main(void)  
{
       
  u16 led0pwmval=0;      
  u8 dir=1;      
  delay_init();            //延时函数初始化          
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);      //设置NVIC中断分组2:2位抢占优先级,2位响应优先级      
  uart_init(115200);   //串口初始化为115200      
  LED_Init();              //LED端口初始化      
  TIM3_PWM_Init(899,0);    //不分频。PWM频率=72000000/900=80Khz      
  while(1)     
  {
             
    delay_ms(10);              
    if(dir)led0pwmval++;//led0pwmval:需要与当前值作比较地比较值          
    else led0pwmval--;          
    if(led0pwmval>300)dir=0;          
    if(led0pwmval==0)dir=1;          
    TIM_SetCompare2(TIM3,led0pwmval);                
  }      
}  

1、TIM3_PWM_Init(899,0)
PWM频率=72000000/(psc+1)/(arr+1)=72Mhz/900=80Khz。表示从0计数到899,频率为72MHz。

2、while内执行过程:
第一次进入while循环时,由于一开始led0pwmval=0,所以10ms内一直处于高电平的状态。
当led0pwmval=1。且计数值<led0pwmval时,出现低电平,剩下的全部是高电平。当led0pwmval=2。计数值<led0pwmval,出现低电平,剩下的全部是高电平,以此类推…直到led0pwmval=300,开始自减,持续之前的比较过程。

timer.c

TIM3_PWM_Init

1、使能GPIO外设和AFIO复用功能模块时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  //使能定时器3时钟  
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);    
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值