杰发科技AC7801——PWM获取固定脉冲个数

测试通道6

在初始化时候打开通道中断

cpp 复制代码
void PWM1_GenerateFrequency(void)
{
    PWM_CombineChConfig combineChConfig[1]; //组合模式相关结构体
    PWM_IndependentChConfig independentChConfig[2];//独立模式相关结构体
    PWM_ModulationConfigType pwmConfig; //PWM模式相关结构体
    PWM_ConfigType config; //PWM模块结构体
    //结构体数据清零
    memset(&combineChConfig, 0, sizeof(combineChConfig));
    memset(&independentChConfig, 0, sizeof(independentChConfig));
    memset(&pwmConfig, 0, sizeof(pwmConfig));
    memset(&config, 0, sizeof(config));
    
    /*channel 6*/
    independentChConfig[0].channel = PWM_CH_6; //通道6
    independentChConfig[0].chValue = MOD_PWM >> 1;//通道6 channel值,输出占空比 = chValue / (config.maxValue + 1) = 50%
    independentChConfig[0].levelMode = PWM_HIGH_TRUE; //输出PWM高有效
    independentChConfig[0].polarity = PWM_OUTPUT_POLARITY_ACTIVE_LOW; //输出极性高有效,PWM mask后PWM输出低电平
    independentChConfig[0].interruptEn = ENABLE;//PWM通道匹配中断使能位
    independentChConfig[0].initLevel = PWM_LOW_LEVEL;//PWM初始电平输出为低,该配置受initChOutputEn控制,决定PWM计数器未工作前PWM口的输出电平值。
    independentChConfig[0].triggerEn = DISABLE;//通道外部触发使能
//    /*channel 7*/
    independentChConfig[1].channel = PWM_CH_7; //通道7
    independentChConfig[1].chValue = MOD_PWM >> 2;//通道7 channel值,输出占空比 = chValue / (config.maxValue + 1) = 25%
    independentChConfig[1].levelMode = PWM_HIGH_TRUE; //输出PWM高有效
    independentChConfig[1].polarity = PWM_OUTPUT_POLARITY_ACTIVE_HIGH; //输出极性高有效,PWM mask后PWM输出低电平
    independentChConfig[1].interruptEn = DISABLE;//PWM通道匹配中断使能位
    independentChConfig[1].initLevel = PWM_LOW_LEVEL;//PWM初始电平输出为低,该配置受initChOutputEn控制,决定PWM计数器未工作前PWM口的输出电平值。
    independentChConfig[1].triggerEn = DISABLE;//通道外部触发使能

    /*modulation mode config*/
    pwmConfig.countMode = PWM_UP_COUNT; //PWM计数器模式 (不同的计数模式频率及占空比计算方式不同)
    pwmConfig.independentChannelNum = 2; //独立通道数
    pwmConfig.combineChannelNum = 0; //组合对数
    pwmConfig.independentChConfig = independentChConfig; //独立通道配置变量地址赋值
    pwmConfig.combineChConfig = combineChConfig; //组合通道配置变量地址赋值
    pwmConfig.deadtimePsc = PWM_DEADTIME_DIVID_1;//死区插入分频值,与deadtime一起决定插入死区的时间。
    pwmConfig.deadtime = 0;  //死区时间 = (DTPSC * DTVAL)/PWM计数器时钟周期 = 1*24/24000000 = 1us
    pwmConfig.initChOutputEn = DISABLE; //使能初始化通道输出,使能后独立PWM模式的initLevel和组合PWM模式的ch1stInitLevel和ch2ndPolarity配置才会生效
    pwmConfig.initTriggerEn = DISABLE; //通道外部触发使能
    
    /*pwm config*/
    config.mode = PWM_MODE_MODULATION;//PWM模块配置为PWM模式
    config.initModeStruct = &pwmConfig;//PWM配置结构体地址赋值
    config.clkSource = PWM_CLK_SOURCE_APB; //PWM时钟源配置
    config.clkPsc = PWM_PRES;//PWM时钟源分频
    config.initValue = 0;//计数器初始寄存器值
    config.maxValue = MOD_PWM - 1; //PWM计数器最大值
    config.overflowInterrupEn = DISABLE;//计数器溢出中断使能
    config.cntOverflowFreq = 0;//CNTOF中断产生的频率与计数器频率的关系(0-127), 0表示每次计数器溢出都产生溢出中断,1表示间隔1次,2表示间隔2次,以此内推。
    config.interruptEn = ENABLE; //PWM中断使能
    config.callBack = PWM1_CallBack; //PWM中断回调
    
    PWM_Init(PWM1, &config); //配置初始化生效

    NVIC_SetPriority(PWM1_IRQn, 0); //设置PWM模块中断的优先级
}

在中断中对通道6开启计数

测试结果多了一个小脉冲,如果是边沿有效,可以减一个计数值

相关推荐
BBNbQKHXygfU3 天前
基于遗传算法优化BP神经网络的时间序列预测探索
mcu
想放学的刺客3 天前
单片机嵌入式试题(第30期)全局变量“满天飞“!!!局限性和影响有哪些,什么情况下才不得不使用?
单片机·嵌入式硬件·mcu·物联网·51单片机
网易独家音乐人Mike Zhou3 天前
【RealMCU】瑞昱官方LOG信息保存及解析,DebugAnalyzer自动化接收脚本(不需要用到ROM.trace文件)
单片机·mcu·物联网·自动化·嵌入式·iot·瑞昱
AIR-IT3 天前
国产ZYJ服务器RAID 5重建完整流程
服务器·国产·raid·浪潮
郝亚军6 天前
获取libiec61850和如何编译iec61850库
mcu·tcp/ip
liu_endong6 天前
杰发科技AC7840——打印所有GPIO的PORT配置寄存器
mcu·算法·杰发科技·autochips·车规芯片
想放学的刺客6 天前
单片机嵌入式系统试题(第28期)flash芯片各引脚作用?低功耗设计估算电池续航时间是多少?如何优化低功耗等项目经验
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机
MickyCode8 天前
嵌入式开发调试之Traceback
arm开发·stm32·单片机·mcu
wotaifuzao9 天前
【Keil 5安装】keil 5最新版本安装+环境配置+下载百度资源分享(安装包,注册机等)
stm32·单片机·嵌入式硬件·mcu·学习·keil5·最新keil
帅次9 天前
系统分析师-信息物理系统分析与设计
stm32·单片机·嵌入式硬件·mcu·物联网·iot·rtdbs