1949啦网--小小 痛苦,是因为能力和欲望不匹配造成的

滴答硬件定时器

#include "stm32f10x.h"  static GPIO_InitTypeDef   GPIO_InitStructure;  #define  PB5OUT(n)   *(volatile uint32_t *)(0x42000000+((uint32_t)&GPIOB->ODR-0x40000000)*32+n*4)      void delay_ms(uint32_t n){      while(n--){      SysTick->CTRL=0; //关闭系统定时器,第0位:使能位,1为使能      SysTick->LOAD=(168000)-1;//配置计数值,因为计算机从0开始,所以减一      SysTick->VAL=0;//清空当前的值(标志位),定时器在计数时,标志位为0,当计数完毕时,标志位为1      SysTick->CTRL=5;//5=101  使能系统计时器,并且使用系统时钟          //第二位:时钟选择位,0=系统时钟/8,1=系统时钟      while((SysTick->CTRL&0x10000)==0);//等待计数到0          //第16位:计数到0则为1            }            SysTick->CTRL=0;  }    void delay_us(uint32_t n){      //us就不用循环了,会增加误差      SysTick->CTRL=0; //关闭系统定时器,第0位:使能位,1为使能      SysTick->LOAD=(168*n)-1;//配置计数值,因为计算机从0开始,所以减一      SysTick->VAL=0;//清空当前的值(标志位),定时器在计数时,标志位为0,当计数完毕时,标志位为1      SysTick->CTRL=5;//5=101  使能系统计时器,并且使用系统时钟          //第二位:时钟选择位,0=系统时钟/8,1=系统时钟      while((SysTick->CTRL&0x10000)==0);//等待计数到0          //第16位:计数到0则为1      SysTick->CTRL=0;  }  void led0(void){      //led0-->PB5      //使能端口      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);      //初始化GPIO引脚      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;      GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;//高速响应      GPIO_Init(GPIOB, &GPIO_InitStructure);      GPIO_SetBits(GPIOB,GPIO_Pin_5);  }  int main(){      led0();              while(1){      PB5OUT(5)=0 ;          delay_ms(500);      PB5OUT(5)=1;          delay_ms(500);      }  }



微信扫码关注

更新实时通知

作者:xiao 分类:硬件笔记 浏览: