STM32 使用寄存器编写SysTick定时器

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;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值