将STM32的系统时钟配置到72Mhz的编程步骤:
1,打开外部高速时钟
RCC_HSEConfig(RCC_HSE_ON);
2,等待外部高速时钟稳定且就绪
while(SUCCESS!=RCC_WaitForHSEStartUp());
3,设置锁相环的时钟源和倍频系数
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
4,使能锁相环
RCC_PLLCmd(ENABLE);
5,等待锁相环准备就绪
while(SET!=RCC_GetFlagStatus(RCC_FLAG_PLLRDY));
6,配置AHB预分频器
RCC_HCLKConfig(RCC_SYSCLK_Div1);
7,配置APB1预分频器
RCC_PCLK1Config(RCC_HCLK_Div2);
8,配置APB2预分频器
RCC_PCLK2Config(RCC_HCLK_Div1);
9,将锁相环时钟作为系统时钟源
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
10,判断系统时钟是否设置成功
while(0x08!=RCC_GetSYSCLKSource());
定时Nms编程步骤:
1,关闭定时器并且配置时钟源为8分频
//将CTRL的第一、第三位置0,第二位不变,第三位置零为8分频,第一位置零为关闭状态
SysTick->CTRL &=~(0x5);
2,清除当前值寄存器
SysTick->VAL =0;//将该寄存器清零,用于读取计时
3,给导入值寄存器赋值---N*9000
SysTick->LOAD =Nms*9000;对寄存器赋值,准备倒计时
4,打开定时器
SysTick->CTRL |=0x1;
5,等待定时器结束
do{
temp=SysTick->CTRL;
}while(!(temp&(1<<16)));对第16位与1,如果为0则进入循环,为1则倒计时结束,退出循环
6,关闭定时器
SysTick->CTRL &=~0x1;
按键控制步骤:
1》打开时钟-----GPIOA
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
2》初始化GPIO
----上拉输入
----GPIO_Pin_0
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin =GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode =GPIO_Mode_IPU;
GPIO_Init(GPIOA,&GPIO_InitStruct);
3》判断按键是否按下
4》是---延时消除抖动
5》判断PA0是否为低电平
6》等待按键抬起----等待PA0的高电平
7》相应按键操作
if(0==GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)){
Systick_delayNms(30);
if(0==GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)){
while(0==GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0));
ret=1;
}
}
返回1则为响应一次,在主函数中可以进行开灯操作