硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1128|回复: 2
收起左侧

AT32使用内核DWT寄存器设定延时时间

[复制链接]

41

主题

1

回帖

124

积分

初级会员

积分
124
发表于 2022-7-19 20:14:47 | 显示全部楼层 |阅读模式
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,验证程序效果。也可以使用逻辑分析仪或示波器抓取波形做进一步验证。

软件资源
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,验证程序效果。也可以使用逻辑分析仪或示波器抓取波形做进一步验证。
image.png


SC0080_AT32_MCU_Using_DWT_as_Delay_Time_V2.0.0.zip

681.06 KB, 下载次数: 14

回复

使用道具 举报

14

主题

62

回帖

104

积分

初级会员

积分
104
发表于 2022-7-20 08:30:26 | 显示全部楼层
这个写法不支持重入
回复

使用道具 举报

1

主题

35

回帖

38

积分

新手上路

积分
38
发表于 2022-7-20 12:32:36 | 显示全部楼层
推荐perf_counter组件,由arm大神开源的,github上可以搜到,us级别延时误差再1us以内
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-3 08:26 , Processed in 0.256281 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表