赞
踩
- #include "stm32f10x.h"
-
- uint8_t D_us=0; //微妙系数
- uint16_t D_ms=0; //毫秒系数
- void delay_Init(void) //延时初始化
- {
- SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//选择外部时钟源HCLK/8
- D_us=SystemCoreClock/8000000; // SystemCoreClock为系统时钟,72MHz。此行代码表示1us需要多少脉冲(9个)
- D_ms=D_us*1000;//1ms所需脉冲为1us的1000倍
- }
- /*
- 利用SysTick定时器实现计数延时
- */
- void Delay_us(uint32_t nus) //延时nus微秒
- {
- uint32_t temp;
- SysTick->CTRL=0x00; //关闭SysTick定时器
- SysTick->LOAD=nus*D_us; //延时重装载值,LOAD倒数到0
- SysTick->VAL=0x00; //清空计数器
- SysTick->CTRL |=0x01; //启动SysTick定时器
- do
- {
- temp=SysTick->CTRL;
- }while((temp&0x01)&&!(temp&(1<<16))); //(temp&0x01)为1,当数到0时,(temp&(1<<16))为1,取反后为0,与后为0,接着执行下面操作,特别的(1<<16)表示1左移16位,与CTRL的16位对位相与
- SysTick->CTRL=0x00;
- SysTick->VAL=0x00;
- }
- void Delay_ms(uint32_t nms) //延时nms毫秒
- {
- uint32_t temp;
- SysTick->CTRL=0x00;
- SysTick->LOAD=nms*D_ms;
- SysTick->VAL=0x00;
- SysTick->CTRL |=0x01;
- do
- {
- temp=SysTick->CTRL;
- }while((temp&0x01)&&!(temp&(1<<16))); //(temp&0x01)为1,当数到0时,(temp&(1<<16))为1,取反后为0,与后为0,接着执行下面操作,特别的(1<<16)表示1左移16位,与CTRL的16位对位相与
- SysTick->CTRL=0x00;
- SysTick->VAL=0x00;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。