找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4542|回复: 5
打印 上一主题 下一主题
收起左侧

stm8s的PWM输出38KHz源代码

[复制链接]
跳转到指定楼层
楼主
ID:324297 发表于 2018-5-7 16:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用stm8s的TIM2 ,输出38KHz的PWM
测试TIME2_CH2的PWM,输出38KHz。
必须放在首次建立工程文件的路径下编译,否则无效。
测试TIME1_CH1的PWM,输出1KHz,可以调PWM。
TIME1_CH1输出需要更改option bytes:AFR0。


单片机源程序如下:
  1. /******************** (C) COPYRIGHT  风驰电子嵌入式开发工作室 ********************/
  2. #include "pwm.h"
  3. #include "stm8s_tim2.h"
  4. #include "stm8s_tim1.h"

  5. static void Delay(u16 nCount);

  6. void Tim1_PWM_Init(void)
  7. {
  8.   //TIM1复位
  9.   TIM1_DeInit();
  10.   
  11.   //16 MHz/16 分频= 1 兆赫、向上计数, 1 MHz /1000 =计数 1000
  12.   TIM1_TimeBaseInit( 15, TIM1_COUNTERMODE_UP, 999, 0 );
  13.   
  14.   //初始化捕获/比较通道1(PWM模式1,启用输出比较),
  15.   TIM1_OC1Init( TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE,
  16.                 //启用互补输出比较1,脉宽50%,输出比较极性高电平,
  17.                 TIM1_OUTPUTNSTATE_ENABLE, 499, TIM1_OCPOLARITY_HIGH,
  18.                 //互补输出比较极性高电平,输出比较空闲状态复位,互补输出比较空闲状态复//位)
  19.                 TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET );

  20.   //启用定时器
  21.   TIM1_Cmd(ENABLE);

  22.   //允许主输出????? 移动 TIM1 定时器。选择 PWM 输出。
  23.   TIM1_CtrlPWMOutputs(ENABLE);
  24. }

  25. void SetTIM1_PWM_DutyCycle( uint16_t TIM1_Pulse)
  26. {
  27.    /* Set the Pulse value */
  28.     TIM1->CCR1H = (uint8_t)(TIM1_Pulse >> 8);//ch1
  29.     TIM1->CCR1L = (uint8_t)(TIM1_Pulse);  
  30.    

  31. }

  32. void TestTIM1_PWM_LED(void)
  33. {
  34.   u16 Duty_Val;
  35.   for(Duty_Val=0;Duty_Val<999;Duty_Val++)
  36.   {
  37.     SetTIM1_PWM_DutyCycle(Duty_Val);
  38.     Delay(0xfff);Delay(0xfff);
  39.     Delay(0xfff);Delay(0xfff);
  40.   }
  41. }


  42. void Tim2_PWM_Init(void)
  43. {
  44.   
  45.     TIM2_TimeBaseInit(TIM2_PRESCALER_1, 420);
  46.     TIM2_OC2Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,210, TIM2_OCPOLARITY_HIGH);
  47.     TIM2_OC2PreloadConfig(ENABLE);
  48.    
  49.   TIM2_Cmd(ENABLE);
  50. }

  51. void SetTIM2_PWM_Frequency(uint16_t TIM2_Period)
  52. {
  53.       /* Set the Autoreload value */
  54.   
  55.     TIM2->ARRH = (uint8_t)(TIM2_Period >> 8);
  56.     TIM2->ARRL = (uint8_t)(TIM2_Period);
  57. }

  58. void SetTIM2_PWM_DutyCycle( uint16_t TIM2_Pulse)
  59. {

  60.     TIM2->CCR2H = (uint8_t)(TIM2_Pulse >> 8);
  61.     TIM2->CCR2L = (uint8_t)(TIM2_Pulse);

  62. }

  63. void TestTim2_PWM_LED(void)
  64. {
  65.   u16 Duty_Val;
  66.   for(Duty_Val=0;Duty_Val<999;Duty_Val++)
  67.   {
  68.     SetTIM2_PWM_DutyCycle(Duty_Val);
  69.     Delay(0xfff);Delay(0xfff);
  70.     Delay(0xfff);Delay(0xfff);
  71.   }
  72. }

  73. void Delay(u16 nCount)
  74. {
  75.   /* Decrement nCount value */
  76.   while (nCount != 0)
  77.   {
  78.     nCount--;
  79.   }
  80. }


  81. /******************* (C) COPYRIGHT 风驰电子嵌入式开发工作室 *****END OF FILE****/
复制代码

所有资料51hei提供下载:
TIM2-PWM.rar (255.98 KB, 下载次数: 73)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:104974 发表于 2019-1-27 10:17 | 只看该作者
“必须放在首次建立工程文件的路径下编译,否则无效。"     这是什么道理,如何解决呢?
回复

使用道具 举报

板凳
ID:67537 发表于 2019-3-28 23:23 | 只看该作者
楼主,占空比1%怎么修改
回复

使用道具 举报

地板
ID:500744 发表于 2019-3-29 17:32 | 只看该作者
没碰到这样的问题
回复

使用道具 举报

5#
ID:135730 发表于 2020-2-2 20:50 | 只看该作者
谢谢分享,学习了
回复

使用道具 举报

6#
ID:1097337 发表于 2023-12-11 11:30 来自手机 | 只看该作者
非常好。遗憾的是IAR环境。想要个STVD环境的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表