- #include "stm32f10x.h"
- static __IO u32 Timing;
- void LED_Init()
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOD,&GPIO_InitStructure);
- GPIOD->BSRR = GPIO_Pin_2;
- }
- /************寄存器版的SysTick******(缺点是while(!(SysTick->CTRL & =0X00010000));
- 在这个时候会浪费CPU*
- void Delay_Us(uint32_t nTime)
- {
- SysTick->LOAD = 72*nTime;//装入定时的次数
- ***** LOAD 重装值寄存器 就是当计数到0的说时候,再次从该数值进行倒计时
- ****
- SysTick->CTRL = 5;// CTRL是控制和状态寄存器
- *** 16 COUNTFLAG 当计数满的时候自动置为1
-
- 2 CLKSOURCE 当该位是0的时候选择的是72M的时钟
- 当该位是1的时候选择的是9M的时钟
- 1 SysTick 当该位是0的时候计数到0的时候不会发送异常处理的标志
- 当该位是1的时候计数到1的时候会发送异常处理的标志
- 0 ENABLE (使能位)当该位为0的时候SysTick不会打开
- 当该位为1的时候打开SysTick;
- ************
- while(!(SysTick->CTRL&0x00010000));
- SysTick->CTRL = 0;
- }*/
- void SysTick_Handler()
- {
- if(Timing!=0)
- Timing--;
- }
- void Delay_us(uint32_t us)
- {
- Timing = us;
- SysTick->CTRL |= 0x07;
- while(Timing!=0);
- SysTick->CTRL |= 0x00;
- }
- void Delay_ms(uint32_t ms)
- {
- Delay_us(ms*1000);
- }
- void Delay_s(uint32_t s)
- {
- Delay_ms(s*1000);
- }
- int main()
- {
- //uint32_t i;
- LED_Init();
- SysTick_Config(72);
- while(1)
- {
- GPIO_ResetBits(GPIOD,GPIO_Pin_2);//输出低电平
- Delay_s(1);
- GPIO_SetBits(GPIOD,GPIO_Pin_2);//输出高电平
- Delay_s(1);
- }
-
- }大家有什么问题可以提出来,一块分析解决。
复制代码
|
感谢分享