本帖最后由 guiyan 于 2023-5-30 17:08 编辑
前言
本文旨在分析APM32F4系列芯片定时器的输出比较模式的工作原理。
详细代码可参考APM32F4xx_SDK_v1.3例程TMR_OCActive。
一、输出比较模式简介
1.1. APM32F4系列,高级/通用定时器都具有4个独立的输出比较通道;
1.2. 定义是:先预设定好一个匹配值,计数器每递增一次,都会与改预定好的匹配值进行比较,若相同,则相应通道则会输出一个电平。
1.3. 输出比较一共有八种输出电平模式:冻结、匹配时通道x为有效电平、匹配时通道x为无效电平、翻转、强制为无效电平、强制为有效电平、PWM模式1和PWM模式2.
二、主要寄存器分析
2.1. TMRx_CCM1[CCnSEL],设置为0,配置为输出比较
2.2. TMRx_CCM1[OCnMOD],该3位是配置输出电平模式的 有效/无效电平取决于电平极性。
2.3. TMRx_CCEN[CCnPOL],该位是配置输出电平极性的
TMRx_CCEN[CCnEN],该位是控制使能的。
2.4. TMRx_CCn[CCn],此寄存器是装载预设定的匹配值的
三、编程思路
3.1. 把定制器配置为输出比较模式(配置TMRx_CCM1[CCnSEL])
3.2. 配置输出电平的极性(配置TMRx_CCEN[CCnPOL])
3.3. 配置选定输出比较模式的其中一种输出电平模式(配置TMRx_CCM1[OCnMOD])
3.4. 设定预匹配的值(配置TMRx_CCn[CCn])
3.5. 使能开启输出(配置TMRx_CCEN[CCnEN])
四、例程演示
4.1 主要实现代码
OCcongigStruct.mode = TMR_OC_MODE_ACTIVE; /* 输出电平模式为输出一个有效电平 */
OCcongigStruct.outputState = TMR_OC_STATE_ENABLE; /* 使能开启输出 */
OCcongigStruct.polarity = TMR_OC_POLARITY_LOW; /* 低电平为有效电平 */
/** TMR2 CH1 delay = 800/1MHz = 800us */
OCcongigStruct.pulse = 800; /* 预设定匹配值 */
TMR_ConfigOC1(TMR2, &OCcongigStruct); /* 写入通道1的寄存器 */
4.2 效果演示
4.3 分析
配置好相关寄存器,并使能开启输出(在1的时刻),因为低电平为有效电平,所以在CNT匹配成功前,都认为是无效电平(即高电平);
然后等待CNT与预定的匹配值相等(在2的时刻),就会根据输出模式,输出一个相应的电平。(这里配置输出模式为输出一个有效电平,即低电平)。
|