这篇具有很好参考价值的文章主要介绍了STC8H8K64U单片机PWM配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。
STC8H8K64U单片机配置PWM的通道1、通道2、通道7、通道8。STC8可以分为两组PWM,PWMA和PWMB,在使用时,如果同时使用了两组,那么两组的寄存器需要同时配置。
一、PWM输出频率计算公式
边沿对齐
PWM输出频率 = 系统工作频率 / (PWMx_PSCR + 1) * (PWMx_ARR + 1);文章来源:https://www.toymoban.com/news/detail-679350.html
中间对齐
PWM输出频率 = 系统工作频率 / (PWMx_PSCR + 1) * PWMx_ARR * 2;文章来源地址https://www.toymoban.com/news/detail-679350.html
二、引脚重定义
STC8H8K64U单片机PWM引脚重定义对照表 |
符号 |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
PWMA_PS |
C4PS[1:0] |
C3PS[1:0] |
C2PS[1:0] |
C1PS[1:0] |
PWMB_PS |
C8PS[1:0] |
C7PS[1:0] |
C6PS[1:0] |
C5PS[1:0] |
PWM通道 1 引脚选择 |
C1PS[1:0] |
PWM1P |
PWM1N |
00 |
P1.0 |
P1.1 |
01 |
P2.0 |
P2.1 |
10 |
P6.0 |
P6.1 |
11 |
|
|
PWM通道 2 引脚选择 |
C2PS[1:0] |
PWM2P |
PWM2N |
00 |
P1.2 |
P1.3 |
01 |
P2.2 |
P2.3 |
10 |
P6.2 |
P6.3 |
11 |
|
|
没有P1.2口的切换到P5.4口上 |
PWM通道 3 引脚选择 |
C3PS[1:0] |
PWM3P |
PWM3N |
00 |
P1.4 |
P1.5 |
01 |
P2.4 |
P2.5 |
10 |
P6.4 |
P6.5 |
11 |
|
|
PWM通道 4 引脚选择 |
C4PS[1:0] |
PWM4P |
PWM4N |
00 |
P1.6 |
P1.7 |
01 |
P2.6 |
P2.7 |
10 |
P6.6 |
P6.7 |
11 |
P3.4 |
P3.3 |
PWM通道 5 引脚选择 |
C5PS[1:0] |
PWM5 |
00 |
P2.0 |
01 |
P1.7 |
10 |
P0.0 |
11 |
P7.4 |
PWM通道 6 引脚选择 |
C6PS[1:0] |
PWM6 |
00 |
P2.1 |
01 |
P5.4 |
10 |
P0.1 |
11 |
P7.5 |
PWM通道 7 引脚选择 |
C7PS[1:0] |
PWM7 |
00 |
P2.2 |
01 |
P3.3 |
10 |
P0.2 |
11 |
P7.6 |
PWM通道 8 引脚选择 |
C8PS[1:0] |
PWM8 |
00 |
P2.3 |
01 |
P3.4 |
10 |
P0.3 |
11 |
P7.7 |
三、设置PWM输出开关和有效电平
STC8H8K64U单片机PWM捕获/比较使能寄存器 |
符号 |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
PWMA_CCER1 |
CC2NP |
CC2NE |
CC2P |
CC2E |
CC1NP |
CC1NE |
CC1P |
CC1E |
PWMB_CCER1 |
|
|
CC6P |
CC6E |
|
|
CC5P |
CC5E |
PWMA_CCER2 |
CC4NP |
CC4NE |
CC4P |
CC4E |
CC3NP |
CC3NE |
CC3P |
CC3E |
PWMB_CCER2 |
|
|
CC8P |
CC8E |
|
|
CC7P |
CC7E |
|
CC1P |
0:关闭输入捕获/比较输出 |
1:开启输入捕获/比较输出 |
CC1E |
0:高电平有效 |
1:低电平有效 |
四、输出使能寄存器
STC8H8K64U单片机PWM输出使能寄存器 |
符号 |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
PWMA_ENO |
ENO4N |
ENO4P |
ENO3N |
ENO3P |
ENO2N |
ENO2P |
ENO1N |
ENO1P |
PWMB_ENO |
|
ENO8P |
|
ENO7P |
|
ENO6P |
|
ENO5P |
五、程序源码
#define PWM_PSC 11 //设置预分频值
#define PWM_PERIOD 124 //设置周期值
void PWM_Init(void)
{
P_SW2 |= 0x80; //使能XFR
PWMA_PS = 0x0A; //PWM-1设置为 P6.0;PWM-2设置为P6.2
PWMB_PS = 0xF0; //PWM-7设置为P7.6;PWM-8设置为P7.7
PWMA_CCER1 = 0x00; //写CCMRx前必须先清零CCERx关闭通道
PWMB_CCER1 = 0x00; //写CCMRx前必须先清零CCERx关闭通道
PWMA_CCER2 = 0x00; //写CCMRx前必须先清零CCERx关闭通道
PWMB_CCER2 = 0x00; //写CCMRx前必须先清零CCERx关闭通道
PWMA_CCMR1 = 0x68; //设置CC1为PWMA输出模式 PWM模式1
PWMA_CCMR2 = 0x68; //设置CC2为PWMA输出模式 PWM模式1
PWMB_CCMR3 = 0x68; //设置CC7为PWMA输出模式 PWM模式1
PWMB_CCMR4 = 0x68; //设置CC8为PWMA输出模式 PWM模式1
PWMA_CCER1 = 0x11; //使能CC1、CC2通道
PWMB_CCER2 = 0x11; //使能CC7、CC8通道
PWMA_PSCRH = (u8)(PWM_PSC >> 8); //设置分频系数
PWMA_PSCRL = (u8)PWM_PSC;
PWMB_PSCRH = (u8)(PWM_PSC >> 8); //设置分频系数
PWMB_PSCRL = (u8)PWM_PSC;
PWMA_ARRH = (u8)(PWM_PERIOD >> 8); //设置周期时间
PWMA_ARRL = (u8)PWM_PERIOD;
PWMB_ARRH = (u8)(PWM_PERIOD >> 8); //设置周期时间
PWMB_ARRL = (u8)PWM_PERIOD;
PWMA_ENO |= 0x05; //使能PWM1P和PWM2P端口输出
PWMB_ENO |= 0x50; //使能PWM8P和PWM7P端口输出
PWMA_BKR = 0x80; //使能主输出
PWMB_BKR = 0x80; //使能主输出
PWMA_CR1 = 0x01; //开始计时 向上计数
PWMB_CR1 = 0x01; //开始计时 向上计数
}
void Set_CHx_Speed(u8 ch,u16 Compare1)
{
switch(ch)
{
case 1:
{
PWMA_CCR1H = (u8)(Compare1 >> 8); //设置占空比时间
PWMA_CCR1L = (u8)(Compare1);
}break;
case 2:
{
PWMA_CCR2H = (u8)(Compare1 >> 8); //设置占空比时间
PWMA_CCR2L = (u8)(Compare1);
}break;
case 7:
{
PWMB_CCR7H = (u8)(Compare1 >> 8); //设置占空比时间
PWMB_CCR7L = (u8)(Compare1);
}break;
case 8:
{
PWMB_CCR8H = (u8)(Compare1 >> 8); //设置占空比时间
PWMB_CCR8L = (u8)(Compare1);
}break;
}
}
到了这里,关于STC8H8K64U单片机PWM配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!