本帖最后由 tanleitanlei 于 2022-7-19 20:17 编辑
AT32使用内核DWT寄存器设定延时时间
示例目的
本示例代码展示了如何使用 AT32 的内核 DWT 寄存器设定延时时间。与 SysTick 类似,使用 DWT也可以得到基于 Cortex-M 内核的精确延时。
注:本应用笔记对应的代码是基于雅特力提供的V2.x.x 板级支持包(BSP)而开发,对于其他版本BSP,需要注意使用上的区别。
支持型号列表:
AT32 全系列
主要使用外设列表:
DWT(Cortex-M 内核)
GPIO
快速使用方法
硬件资源
1) AT-START-F403A V1.x 实验板;
软件资源
1) 该 Demo 以 AT32F403A 为例,BSP 版本 AT32F403A_407_Firmware_Library_V2.0.6。
2) 在 at32f403a_407_board.c 中,新增了 DWT 配置以支援 dwt_delay 延时函数设定:
DWT 初始化函数 void dwt_delay_init(void);
DWT 微秒延时函数 void dwt_delay_us(uint32_t nus);
DWT 毫秒延时函数 void dwt_delay_ms(uint16_t nms);
DWT 秒延时函数 void dwt_delay_sec(uint16_t sec);需要注意的是,240MHz 时 DWT 毫秒延时函数的参数只支持到 0x45EF (十进制 17895,已达到17sec),否则会产生溢出,超过 10s 的情况建议使用 DWT 秒延时函数。
3) 本示例代码 main.c 中,每隔 500ms,LED2(红色)会使用 SysTick 翻转一次,LED4(绿色)会使用DWT 翻转一次,用以观测延时效果。
注 : 所 有 project 都是基于 keil 5 而 建 立 , 若 用 户 需 要 在 其 他 编 译 环 境 上 使 用 , 请 参 考AT32xxx_Firmware_Library_V2.x.x\project\at_start_xxx\templates中各种编译环境(例如IAR6/7,keil 4/5)进行简单修改即可
示例使用
1) 打开\SourceCode\SC0080_SourceCode_V2.0.0\utilities\SC0080_Demo\mdk_v5\DWT.uvprojx源程序,编译后下载到实验板。
2) 观察 LED2/LED4,验证程序效果。也可以使用逻辑分析仪或示波器抓取波形做进一步验证。
|