一、先看一下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的滴答定时器延时函数就编写完毕了,希望能帮助到大家!

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐