历史上的今天
今天是:2025年07月17日(星期四)
2018年07月17日 | STM32F0_SYSTICK在STM32CUBEMX中的设置
2018-07-17 来源:eefocus
用过STM32CUBEMX的童鞋们都知道,代码生成的时候默认HAL_Delay延时单位为ms,当程序中要用到us延时的时候该怎么办呢!
最终评估下来,感觉原子的思路比较靠谱,不带OS的设计理念是搞清楚SYSTICK的RELOAD寄存器的数值代表什么,代码生成时默认为47999,也就是说
定时器从47999减1减到0的时候,时间过了1000us,换算后得出数值从47减到1的时候时间过了1us.
void HAL_Delay_us(__IO uint32_t delay_us)
{
uint32_t first_value = 0;
uint32_t current_value = 0;
uint32_t reload = SysTick ->LOAD;
uint32_t nus_number = delay_us * ((reload + 1) / 1000);
uint32_t change_number = 0;
first_value = SysTick ->VAL;
while(1)
{
current_value = SysTick ->VAL;
if(current_value != first_value)
{
if(current_value < first_value)
{
change_number += first_value - current_value;
//change_number = first_value - current_value + change_number;
}
else
{
change_number += reload - current_value + first_value;
}
first_value = current_value;
if(change_number >= nus_number)
{
break;
}
}
}
}
无需更改任何其它代码,直接在需要的地方插入HAL_Delay_us(nus);
史海拾趣
|
c51和电脑通讯用rs232通讯 但是总是在通讯了几十次之后会出现数据丢数的情况 单片机收的数据不全 我PC上的软件是显示已经发送数据过去了 问题出在哪呢?… 查看全部问答> |
|
各位大虾,导师让我开发一个wince程序,我照着书开始配环境 安装了visualstudio.net 2005 visual studio.net 2005 service pack package 1 windows embedded ce 6.0.msi &nb ...… 查看全部问答> |
|
1.支持多种硬件平台 由于嵌入式设备硬件平台的多样性,CPU芯片的快速更新,嵌入式操作系统要求支持常用的嵌入式CPU,如X86, ARM, MIPS, POWERPC等,并具有良好的可移植性。另外还需要支持种类繁多的外部设备。Linux支持以上几乎所有的主流芯片, ...… 查看全部问答> |
|
魔方机器人,取名小螃蟹,这只小螃蟹可以用两个钳子解开魔方,特发上来和大家分享下 视频地址:http://v.youku.com/v_show/id_XMjU0MTE3Mzgw.html, 详情关注:http://hi.baidu.com/jialaolian629/blog(打个广告 ) 大家有兴趣可以跟帖交流,嘿 ...… 查看全部问答> |




