一、时钟配置 STM32F103C8T6
Clock Connfiguration
To Cortex System timmer(MHz) ,系统滴答定时器的时钟为72MHz
二、us微秒延时函数
my_sysTick.c
#include "my_sysTick.h"
//nus微秒延时函数
void delay_us(uint16_t nus)
{
//SystemCoreClock
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8); //设置SysTick系统滴答定时器8分频, 72/8 = 9MHz
SysTick->LOAD = 9 * nus; //写入计数周期, 72MHz进行8分频后得到9MHz的(SysTick)时钟源频率,因此1us是9个时钟脉冲;
SysTick->VAL = 0x00; //清空VAL计数器, SysTick系统滴答定时器是个递减计数器
SysTick->CTRL = 0x01; //使能计数器,使用外部时钟源, CTRL的第0位是使能位,为1开始计数,为0关闭计数
while(!(SysTick->CTRL & 0x00010000)); //while循环,等待计数到0 (当VAL递减到0时,CTRL寄存器的第16位会被硬件置1, 以此为条件判断是否结束循环)
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
my_sysTick.h
#ifndef __MY_SYSTICK_H
#define __MY_SYSTICK_H
#include "gpio.h"
//#define tick = SystemCoreClock/1000000;
//我的函数声明
void delay_us(uint32_t nus);
void delay_ms(uint32_t nms);
#endif
三、ms毫秒延时函数(对微秒函数循环1000次 1ms = 1000us)
void delay_ms(uint32_t nms)
{
while(nms--)
{
delay_us(1000);
}
}
四、s秒延时函数(对毫秒函数循环1000次 1s = 1000ms)
void Delay_s(uint32_t ns)
{
while(ns--)
{
delay_ms(1000);
}
}
---------------------------------------------------- end ---------------------------------------------
程序是借鉴来的,希望能帮到和我一样的新手们。