4、微秒级延时函数 根据上面的介绍我们现在需要一个微秒级的精确延时函数,否则就不能成功的读取传感器数据。STM32单片机的滴答定时器可以满足。 (1)保证滴答定时器的时钟频率为72MHz STM32F103内部8M的内部震荡,经过倍频后最高可以达到72M。在固件库3.0以上,只需要通过两步就可以完成对时钟频率的选择。 ①修改system_stm32f10x.c开头的时钟宏定义,如下: /* #define SYSCLK_FREQ_HSE HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz 24000000 */
/* #define SYSCLK_FREQ_36MHz 36000000 */
/* #define SYSCLK_FREQ_48MHz 48000000 */
/* #define SYSCLK_FREQ_56MHz 56000000 */
#define SYSCLK_FREQ_72MHz 72000000
②在主函数main中调用SystemInit()函数。 ③如果没有成功,需要检查单片机的晶振是否起振。简单的检测方法: 有示波器的可以查看晶振的输出波形,正常应为正弦波。没有示波器的可以利用万用表分别测量晶振的管脚电平,正常应在1/2*VCC左右。 (2)程序编写 ①在main()函数中添加:SysTick_Config(72000000 / 1000000);//除以1000000微秒级(100000十微秒级,1000毫秒级),指进入中断的间隔时间 int main(void)
{
SystemInit();
SysTick_Config(72000000 / 1000000);
}
②Delay.c #include "stm32f10x.h"
#include "Delay.h"
int TimingDelay=0;
void delay_us(u32 n)
{
TimingDelay=n;
while(TimingDelay!=0);
}
void delay_ms(u32 n)
{
while(n--)
{
delay_us(1000);
}
}
|