标题: 自己写的STM8S PWM输出程序 用的是TIM1中间对齐方式 [打印本页]

作者: 叫我红领巾    时间: 2018-7-18 21:44
标题: 自己写的STM8S PWM输出程序 用的是TIM1中间对齐方式
用的是TIM1 中间对齐方式


单片机源程序如下:
  1. /*边沿对齐PWM CH1输出*/
  2. /*注意:LCD R/W引脚需要硬件接地 若要软件接地则GPIO初始化内定义*/

  3. #include"iostm8s208mb.h"

  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define ulong unsigned long

  7. void delay(uint z) //约1ms延时
  8. {
  9.   uint i,j;
  10.   while (z--)
  11.   {
  12.     for(i=0;i<50;i++)
  13.       for(j=0;j<20;j++);
  14.   }
  15. }

  16. void CH1_PWM_SET(ulong SET_CH1,float Duty_CH1)//改变占空比
  17. {
  18.   float a;
  19.   a=Duty_CH1*SET_CH1;
  20.   TIM1_CCR1H=((uint)(a))/256;
  21.   TIM1_CCR1L=((uint)(a))%256;
  22.   TIM1_CCMR1|=0x60;
  23.   TIM1_CCER1&=0xfd;
  24.   TIM1_CCER1|=0x01;
  25.   TIM1_OISR|=0x01;
  26. }

  27. void CH2_PWM_SET(ulong SET_CH2,float Duty_CH2)//改变占空比
  28. {
  29.   float a;
  30.   a=Duty_CH2*SET_CH2;
  31.   TIM1_CCR2H=((uint)(a))/256;
  32.   TIM1_CCR2L=((uint)(a))%256;
  33.   TIM1_CCMR2|=0x60;
  34.   TIM1_CCER1&=0xdf;
  35.   TIM1_CCER1|=0x10;
  36.   TIM1_OISR|=0x04;
  37. }

  38. void CH3_PWM_SET(ulong SET_CH3,float Duty_CH3)//改变占空比
  39. {
  40.   float a;
  41.   a=Duty_CH3*SET_CH3;
  42.   TIM1_CCR3H=((uint)(a))/256;
  43.   TIM1_CCR3L=((uint)(a))%256;
  44.   TIM1_CCMR3|=0x60;
  45.   TIM1_CCER2&=0x3d;
  46.   TIM1_CCER2|=0x01;
  47.   TIM1_OISR|=0x10;
  48. }

  49. void TIM1_PWM_SET(ulong PWM_SET)//改变周期
  50. {
  51. //  PWM_SET=(PWM_SET/2); //改变和边沿对齐一样的频率
  52.   TIM1_ARRH=PWM_SET/256;
  53.   TIM1_ARRL=PWM_SET%256;
  54.   TIM1_CR1|=0x60;
  55.   CH1_PWM_SET(PWM_SET,0.2);
  56.   CH2_PWM_SET(PWM_SET,0.4);
  57.   CH3_PWM_SET(PWM_SET,0.6);
  58.   TIM1_CR1|=0x01;
  59.   TIM1_BKR|=0x80;
  60. }

  61. void main(void)
  62. {
  63.   CLK_CKDIVR=0x00;
  64.   delay(10);
  65.   TIM1_PWM_SET(16000);
  66.   while(1);
  67. }
复制代码

所有资料51hei提供下载:

中间对齐TIM1PWM输出.rar (273.98 KB, 下载次数: 26)







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1