小小记录一下APM32F103RCT6使用滴答定时器配置延时函数delay.c
将之前的#define __Vendor_SysTickConfig0更改并剪切到#if defined(__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)上方。假设系统时钟 f=96×106Hz ,使用公式 t=fN ,这里 N=95999 ,则 t=96×10695999≈0.00099999s≈1ms。类型,以此告知编译器该
一、先看一下APM32F103xC的时钟树。

从提供的 “APM32F103xC 时钟树” 图中可知:
-
系统时钟(SYSCLK)的最大频率为 96MHz。
-
如果系统时钟(SYSCLK)被配置为 96MHz,即 f=96×106H
假设系统时钟 f=96×106Hz ,使用公式 t=N/f ,这里 N=95999 ,则 t=95999/96×106≈0.00099999s≈1ms。
所以我们使用SysTick_Config(95999)来配置滴答定时器。
注意点:先跳转到SysTick_Config(95999)定义里

将之前的#define __Vendor_SysTickConfig 0更改并剪切到#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)上方。

如果不知道#define __Vendor_SysTickConfig 0在哪的同学可以跟着下图跳转

二、接下来就是延时函数的编写,创建个delay.c
#include "delay.h"
volatile u16 time1 = 0; //一定要把 time1 声明为 volatile 类型,否则time1的值无法正常更新
void SysTick_Handler(void)
{
time1++;
}
void delay_ms(u16 t)
{
time1=0;
while(time1<t)
{
//空循环
}
}
延时函数需要注意两点,一点就是SysTick_Handler(void)函数系统已经在apm32f10x_int.h中定义过了,需要大家去给它注释掉,另一个就是把 time1 声明为 volatile 类型,以此告知编译器该变量的值可能会在程序的控制之外被改变,禁止编译器对其进行过度优化。
到此,APM32F103RCT6的滴答定时器延时函数就编写完毕了,希望能帮助到大家!
更多推荐



所有评论(0)