使用stm8s的TIM2 ,输出38KHz的PWM
测试TIME2_CH2的PWM,输出38KHz。
必须放在首次建立工程文件的路径下编译,否则无效。
测试TIME1_CH1的PWM,输出1KHz,可以调PWM。
TIME1_CH1输出需要更改option bytes:AFR0。
单片机源程序如下:
- /******************** (C) COPYRIGHT 风驰电子嵌入式开发工作室 ********************/
- #include "pwm.h"
- #include "stm8s_tim2.h"
- #include "stm8s_tim1.h"
- static void Delay(u16 nCount);
- void Tim1_PWM_Init(void)
- {
- //TIM1复位
- TIM1_DeInit();
-
- //16 MHz/16 分频= 1 兆赫、向上计数, 1 MHz /1000 =计数 1000
- TIM1_TimeBaseInit( 15, TIM1_COUNTERMODE_UP, 999, 0 );
-
- //初始化捕获/比较通道1(PWM模式1,启用输出比较),
- TIM1_OC1Init( TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE,
- //启用互补输出比较1,脉宽50%,输出比较极性高电平,
- TIM1_OUTPUTNSTATE_ENABLE, 499, TIM1_OCPOLARITY_HIGH,
- //互补输出比较极性高电平,输出比较空闲状态复位,互补输出比较空闲状态复//位)
- TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET );
- //启用定时器
- TIM1_Cmd(ENABLE);
- //允许主输出????? 移动 TIM1 定时器。选择 PWM 输出。
- TIM1_CtrlPWMOutputs(ENABLE);
- }
- void SetTIM1_PWM_DutyCycle( uint16_t TIM1_Pulse)
- {
- /* Set the Pulse value */
- TIM1->CCR1H = (uint8_t)(TIM1_Pulse >> 8);//ch1
- TIM1->CCR1L = (uint8_t)(TIM1_Pulse);
-
-
- }
- void TestTIM1_PWM_LED(void)
- {
- u16 Duty_Val;
- for(Duty_Val=0;Duty_Val<999;Duty_Val++)
- {
- SetTIM1_PWM_DutyCycle(Duty_Val);
- Delay(0xfff);Delay(0xfff);
- Delay(0xfff);Delay(0xfff);
- }
- }
- void Tim2_PWM_Init(void)
- {
-
- TIM2_TimeBaseInit(TIM2_PRESCALER_1, 420);
- TIM2_OC2Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,210, TIM2_OCPOLARITY_HIGH);
- TIM2_OC2PreloadConfig(ENABLE);
-
- TIM2_Cmd(ENABLE);
- }
- void SetTIM2_PWM_Frequency(uint16_t TIM2_Period)
- {
- /* Set the Autoreload value */
-
- TIM2->ARRH = (uint8_t)(TIM2_Period >> 8);
- TIM2->ARRL = (uint8_t)(TIM2_Period);
- }
- void SetTIM2_PWM_DutyCycle( uint16_t TIM2_Pulse)
- {
-
- TIM2->CCR2H = (uint8_t)(TIM2_Pulse >> 8);
- TIM2->CCR2L = (uint8_t)(TIM2_Pulse);
- }
- void TestTim2_PWM_LED(void)
- {
- u16 Duty_Val;
- for(Duty_Val=0;Duty_Val<999;Duty_Val++)
- {
- SetTIM2_PWM_DutyCycle(Duty_Val);
- Delay(0xfff);Delay(0xfff);
- Delay(0xfff);Delay(0xfff);
- }
- }
- void Delay(u16 nCount)
- {
- /* Decrement nCount value */
- while (nCount != 0)
- {
- nCount--;
- }
- }
- /******************* (C) COPYRIGHT 风驰电子嵌入式开发工作室 *****END OF FILE****/
复制代码
所有资料51hei提供下载:
TIM2-PWM.rar
(255.98 KB, 下载次数: 74)
|