先贴出延时函数
7 D4 s; T! X8 T2 F% `7 _* t( B! ~- /*****************************************************************% N; ~2 \: Y" U- c# `
- * 基于STM32F0 HAL的微秒延时函数3 t4 w) v1 C* C* M
- * @功能:实现US级延时
, R6 |! j5 i. s - * @注意:精准延时范围:2~999US1 R6 ?7 y& O; b. _, s/ {
- * 2019-07-03 Designed By XiaoYang http://www.pypyn.com
9 _7 m1 c k4 J z1 ~6 c- k - ******************************************************************/+ n/ p& x- a: { a/ X, f- O/ U
- uint32_t CFG_VAL = 0;
" z: D* N, j/ P# y) [ - void HAL_Delay_US(__IO uint32_t Delay), B2 b( N1 P0 j
- {" F/ C' }$ N$ j
- if(Delay < MAX_Delay_CNT && Delay > 1)
u! j3 ~/ W' H1 X4 J - {2 b; w7 F4 g9 W7 x$ h
- uint32_t wait = SysTick->LOAD - ((Delay - 1) * CFG_VAL);
6 z2 N5 O t) C) k$ ]8 m- q% q ] - //CFG_VAL = HAL_RCC_GetHCLKFreq()/1000U/1000U))
3 O V7 C( X' C h5 y/ z) A5 [ - //计算出等待1US需要的计数器值
8 l$ o# l7 ?- J6 \" z - SysTick->VAL=0UL; //重置SysTick计数器,计数器为向下计数, {( o( F, m" `7 V
- while(wait < (SysTick->VAL)); //等待时间到达9 Z8 ^. V* y3 I$ a5 C! s
- }
$ x; s g7 h |+ ?* i2 I - }
复制代码 展示一下效果
9 V- H/ E5 ^# k6 ?+ g- HAL_Delay_US(50);
]+ o" f* p! d - LED_GPIO_Port->ODR ^= LED_Pin;
复制代码
L, l, s2 P( B& B3 I3 ]) ?
% o* j$ D) A F: e. e7 W& S& \6 j
5 A% A, @0 p% Q" I% t* m' Z) m
板子使用的是STM32F030F4。* ]1 y) u9 e1 A' r
User_Drivers.zip
(946 Bytes, 下载次数: 16)
|
哈哈,完全赞同
并不是通过systick中断去做定时,而是通过等待systick定时计数器的计数值达到目标值的方法实现。us级太短了,进中断完全是不明智的选择,我这个想法只能用在一些很简单的项目上。