历史上的今天
今天是:2025年01月30日(星期四)
2020年01月30日 | 使用STM8S003定时器的PWM功能输出PWM波
2020-01-30 来源:eefocus
一、使用定时器TIM2的CH1、CH2、CH3通道PWM输出
1.在使用stm8s系列的单片机的时候,使用的头文件大部分都是通用的stm8s.,第一步修改头文件:
/* Uncomment the line below according to the target STM8S or STM8A device used in your
application. */
/* #define STM8S208 */ /*!< STM8S High density devices with CAN */
/* #define STM8S207 */ /*!< STM8S High density devices without CAN */
/* #define STM8AF52Ax */ /*!< STM8A High density devices with CAN */
/* #define STM8AF62Ax */ /*!< STM8A High density devices without CAN */
/* #define STM8S105 */ /*!< STM8S Medium density devices */
/* #define STM8AF626x */ /*!< STM8A Medium density devices */
#define STM8S103 /*!< STM8S Low density devices */
/* #define STM8S903 */ /*!< STM8S Low density devices */
2.取消stm8s103的注释,103和003的寄存器地址都是一样的,所以我们这里用103替代003.
3.引脚使用PWM功能时无需配置GPIO状态,直接配置寄存器即可。例如TIM2的库函数配置如下:
TIM2_TimeBaseInit(TIM2_PRESCALER_1, 7999); /* 1分频 ,计数值8000,频率=16M/8000=2kHZ */
/* PWM1 Mode configuration: Channel1 */
TIM2 Channel1 duty cycle = [TIM2_CCR1/(TIM2_ARR + 1)] * 100 = 50%*/
TIM2_OC1Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE,2000, TIM2_OCPOLARITY_HIGH);
TIM2_OC1PreloadConfig(ENABLE);
/* PWM2 Mode configuration: Channel2 */
TIM2_OC2Init(TIM2_OCMODE_PWM2, TIM2_OUTPUTSTATE_ENABLE,2000, TIM2_OCPOLARITY_HIGH);
TIM2_OC2PreloadConfig(ENABLE);
/* PWM3 Mode configuration: Channel3*/
TIM2_OC3Init(TIM2_OCMODE_PWM2, TIM2_OUTPUTSTATE_ENABLE,2000, TIM2_OCPOLARITY_HIGH);
TIM2_OC3PreloadConfig(ENABLE);
TIM2_Cmd(ENABLE);
4.配置完成后,调试输出2kHz 占空比为25%的PWM波,如下图所示:

5.因为TIM2的这3个PWM通道都没有用到Alternative功能,不需要配置Options Bytes。
二、使用定时器TIM1的CH1、CH2、CH3通道的PWM功能
1. TIM1的CH1、CH2为需要配置的引脚复用功能,在调试程序之前,需要配置Option Bytes。AFR0设置为Alternate active.


2. TIM1三通道输出PWM寄存器实例:
CLK->CKDIVR= 0x00; //内部16M时钟不分频
TIM2->PSCR = 0x00; //定时器2预分频系数为1
TIM2->CR1 = 0x01; //内部计数器使能;
TIM2->ARRH = 0x00;//0140,320分频,16M/320=50K,实测49.75K
TIM2->ARRL = 0x8a;//自动装载寄存器低位;实测013e正好为50.0K
/*PWM通道1设置*/
TIM2->CCER1 |= 0x01; //开启OC1信号输出脚
TIM2->CCMR1 = 0x60; //PWM1模式
TIM2->CCR1H = 0x00; //占空比高位
TIM2->CCR1L = 0x37; //占空比低位
TIM2->CCMR1 |= 0x08; //输出比较1预装载使能
/*PWM通道2设置*/
TIM2->CCER1 |= 0x10; //开启OC2信号输出脚
TIM2->CCMR2 = 0x60; //PWM1模式
TIM2->CCR2H = 0x00; //占空比高位
TIM2->CCR2L = 0x37; //占空比低位
TIM2->CCMR2 |= 0x08; //输出比较2预装载使能
/*PWM通道3设置*/
TIM2->CCER2 |= 0x01; //开启OC3信号输出脚
TIM2->CCMR3 = 0x60; //PWM1模式
TIM2->CCR3H = 0x00; //占空比高位
TIM2->CCR3L = 0x37; //占空比低位
TIM2->CCMR3 |= 0x08; //输出比较3预装载使能
TIM2->CR1 |= 0x01;
下一篇:STM8硬件PWM设置
史海拾趣
|
在wince下调用软键盘,代码如下 void CRecorderDlg::OnBnClickedButton6() { // TODO: Add your control notification handler code here SipShowIM(SIPF_ON); //Shows&nb ...… 查看全部问答> |
|
我想把一个带 透明通道的bitmap作为前景贴到一个不带透明通道的背景bitmap上,试了几种方法 都不理想,包括 TransparentBlt(...),alphablend(...),还使用过maskdc 的方法,都不理想。 前两种方法把我的小的前景,拉伸到跟背景一样大;而且Transpa ...… 查看全部问答> |
|
前几天取汉字模从网上下个软件,不太好,就因为取然的格式带H地,我要C语言数组地,以前用过清华蓬远的取模软件,我认为是最好地,今天翻出特发上来,大家共享,我也MARK,省得以后再找不到,呵呵… 查看全部问答> |
|
今天连续看了两篇关于加密方面的帖子,感觉自己应该友情奉献一回了~~~ 设想一种加密办法,大家看看可行吗? 关于STM32F器件电子签名以及加密问题-请指点 今日方知STM32的UID为96位即12个字节,以前知道STM32内嵌CRC32. 网上在线CRC演算工 ...… 查看全部问答> |




