** AT32 TMR利用RPR寄存器输出指定个数PWM波**
示例目的
本示例代码基于AT32F421,展示了如何使用AT32 的高级定时器TMRx 的重复周期寄存器(TMRx_RPR)输出指定个数的PWM 波。该示例使用TMR1 产生指定个数的7 通道PWM 波。利用重复周期寄存器(TMRx_RPR)非0 时,每次溢出重复计数器递减(不产生溢出事件),当重复计数器递减到 0 时,产生溢出事件这一特性,将需要产生的PWM 个数装载入TMRx_RPR 寄存器。在主函数中循环检测,如果USER 按键摁下,TMR1 开始计数。在TMR1 的溢出中断,关闭TMR1 计数。直到检测到下一次USER 按键摁下,再次产生指定个数的PWM 波。
注:本应用笔记对应的代码是基于雅特力提供的V2.x.x 板级支持包(BSP)而开发,对于其他版本BSP,需要注意使用上的区别。
支持型号列表:
支持型号 AT32 全系列
主要使用外设列表:
主要使用外设 TIMER
快速使用方法
硬件资源
-
AT-START-F421 V1.x 实验板;
-
逻辑分析仪或示波器。
软件资源
-
该Demo 以AT32F421 为例,BSP 版本AT32F421_Firmware_Library_V2.0.x。
-
板级初始化(按键、LED 灯等),NVIC 配置(溢出中断),main()函数中循环检测,如果USER按键摁下,TMR1 开始计数,翻转LED2 指示计数开始。
-
TMR 配置:
配置TMR1 的7 个通道产生PWM 波。
配置TMR1 的溢出中断,在其中关闭TMR1 计数并翻转LED2 指示计数结束,直到检测到下一次USER 按键摁下,再次产生指定个数的PWM 波。
可对main.c 的“#define PWM_NUM 100”做相应修改,配置想要的PWM个数,需小于TMRx_RPR寄存器的最大值。
注: 所有project 都是基于keil 5 而建立, 若用户需要在其他编译环境上使用, 请参考AT32xxx_Fi rmware_Library_V2.x.x projectat_start_xxx emplates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可。
示例使用
-
硬件连接:将7 通道PWM 对应GPIO 引脚接入逻辑分析仪或示波器。
-
打开SourceCodeSC0088_SourceCode\utilitiesSC0088_Demomdk_v5
pr_pwm_output 源程
序,编译后下载到实验板。
-
观察LED2,抓取波形,验证程序效果。
源代码请看如下路径:
https://bbs.21ic.com/forum.php?mod=viewthread&tid=3238054&page=1&extra=#pid12894004
|