- 打卡等级:常住居民III
- 打卡总天数:134
- 最近打卡:2025-05-03 08:22:49
高级会员
- 积分
- 598
|
本帖最后由 泰勒soc 于 2023-9-5 16:52 编辑
求大神看看我的代码,需求是通过PWM4P这个引脚输出一个周期1s,占空比50%的方波。用来做有源蜂鸣器的报警效果不知道对不对??????????????
型号STC8H1K08-SOP16
#include "../SOFTWARE/PWM.h"
#define PWM_ARR 999 // 1/1000s * 1000 =1s
#define PWM_CCR 499 //499
#define PWM_PSC 23999 //24000000 / 24000 = 1000Hz
//========================================================================
// 函数名称: PWMA_Init
// 函数功能: p16端口输出一个PWM信号
// 入口参数: 无
// 函数返回: 无
// 当前版本: VER1.0
// 修改日期: 2023
// 当前作者:
// 其他备注:
//输出频率 = sysclk(22.1184mhz)/(pscr+1)/(arr+1) = 22118400 / 1 / ( 999+1) = 22118.4hz = 22.1184khz
//输出占空比 = ccr/( arr+1 )*100% = 500/( 999+1) = 50%
//========================================================================
void PWMA_Init(void) //PWMA的初始化
{
//1.时钟源选择
//2.时基单元选择
PWMA_PSCRH = (u8)(PWM_PSC>>8); //65535+1分频
PWMA_PSCRL = (u8)(PWM_PSC);
PWMA_ARRH = (u8)(PWM_ARR>>8); //自动装载值设置周期时间
PWMA_ARRL = (u8)(PWM_ARR);
PWMA_CCR4H = (u8)(PWM_CCR>>8);//设置占空比时间
PWMA_CCR4L = (u8)(PWM_CCR);
//3.输入输出的引脚配置
PWMA_ENO = 0X00; //使能PWM4P通道输出,P16引脚
PWMA_ENO |= 0X40;
PWMA_PS = 0x00; //选择PWM4输出
PWMA_PS &= 0x3f;
//4.输入输出模式设置
PWMA_CCER2 = 0X00;
PWMB_CCMR4 = 0x68; // 通道模式配置, PWM模式1, 预装载允许
PWMB_CCER2 |= 0x10; // 开启比较输出CC4E, 高电平有效00010000
// PWMB_IER |= 0x10; // 使能中断
PWMB_EGR = 0x01; //产生一次更新事件, 清除计数器和预分频计数器, 装载预分频寄存器的值
PWMA_BKR = 0X80; //使能主输出
PWMA_CR1 |= 0X81; //启动计数器
}
|
|