STM32 使用寄存器编写SysTick定时器
STM32入门一定要搞清楚定时器
可以通过system自定义延时函数
废话不多说 ,直接上码
#include "stm32f10x.h"
u16 fas_ms;
u32 fas_us;
void SystemInit()
{
}
void Led_init()
{
RCC->APB2ENR |= 1 << 4;
GPIOC->CRL &= 0xFFFFFFF0;
GPIOC->CRL |= 0X00000003;
GPIOC->BSRR = 1 << 16;
}
void Delay_Init()
{
//GPIOA8
RCC->APB2ENR = 1 << 2;
GPIOA->CRH &= ~(0x0F);
GPIOA->CRH |= 3; //推挽输出 50MHz
GPIOA->BSRR = 1 << 8; //清除
SysTick->CTRL &= ~(1 << 2); // 外部时钟
SysTick->CTRL |= 1 << 1; //设置倒数产生动作
fas_us = 1; //1us
fas_ms = 1000; // 1000ms
}
void delayms(u32 ms)
{
u32 temp;
SysTick->LOAD = ms * fas_ms;
SysTick->VAL = 0x00; //清空
SysTick->CTRL = 1; //开始倒数
do{
temp = SysTick->CTRL;
}while((temp & 0x01) && !(temp & (1 << 16)));
SysTick->CTRL = 0 ; //关闭
SysTick->VAL = 0x00; //清空
}
int main()
{
Delay_Init();
Led_init();
while(1)
{
GPIOC->BSRR = 1 << 16; //清除
delayms(1000);
GPIOC->BSRR = 1; //点灯
delayms(1000);
}
return 0;
}