我感觉在初学stm32的时候,就把stm32当做51学习吧,等到学到一定程度的时候,就会接触到很多新的东西,例如文件系统、gui、rtos、字库等等,边学习着边做点DIY就会收获的更多,本人以前学习51、pic等等,做过很多diy,由于快要毕业了,打算学习一年的stm32,为以后的工作做点铺垫。闲话不多说了,上例程......
1.点亮流水灯
其实就是把io口配置好了就可以点亮发光二极管了
#define LED0 PBout(5)//PBout(5)代表PB.5是输出状态
#define LED1 PEout(5)
//led初始化函数
//无参数
//无返回值
void LED_INIT(void)
{
//led0 PB5
//led1 PE5
RCC->APB2ENR|=1<<3; //打开PB口时钟
GPIOB->CRL&=0XFF0FFFFF;//清除PB5的原有状态
GPIOB->CRL|=0X00300000;//设置PB5为通用推挽式输出,50MHZ
GPIOB->ODR|=1<<5; //设置PB5输出高电平,灯不亮,因为是共阳极
RCC->APB2ENR|=1<<6; //打开PE口时钟
GPIOE->CRL&=0XFF0FFFFF;//清除PE5的原有状态
GPIOE->CRL|=0X00300000;//设置PE5为通用推挽式输出,50MHZ
GPIOE->ODR|=1<<5; //设置PE5输出高电平,灯不亮,因为是共阳极
}
以上是初始化函数,步骤依次是1)初始化外设时钟,用到那个外设就初始化哪个外设时钟
2)配置io口输入输出状态
3)配置io口输出的高低电平
2.按键检测
按键检测唯一和流水灯不同的是得把io口设置为输入状态(上拉或者下拉模式),只有在初始化的时候不同而已。
//按键初始化函数
//无参数
//无返回值
void KEY_INIT(void)
{
RCC->APB2ENR|=1<<6; //打开PE口时钟
GPIOE->CRL&=0XFFF000FF;//清除PE2 3 4的原有状态
GPIOE->CRL|=0X00088800;//设置PE2 3 4为输入
GPIOE->ODR|=7<<2; //设置PE2 3 4输出高电平,上拉
RCC->APB2ENR|=1<<2; //打开PA口时钟
GPIOA->CRL&=0XFFFFFFF0;//清除PA0的原有状态
GPIOA->CRL|=0X00000008;//设置PA0为输入
}
以上是初始化函数,步骤依次是1)初始化外设时钟,用到那个外设就初始化哪个外设时钟
2)配置io口输入输出状态
3)配置io口输出的高低电平
3.蜂鸣器
蜂鸣器分为有源和无源两种,我们一般使用的有源,有源的意思是通电即响,无源蜂鸣器得给蜂鸣器一定的脉冲信号,如果使用有源蜂鸣器,那么它的用法和点亮流水灯一样了。只需控制io口的高低电平即可。
#define BEEP PBout(8)
//蜂鸣器初始化函数
//无参数
//无返回值
void BEEP_INIT(void)
{
RCC->APB2ENR|=1<<3; //打开PB口时钟
GPIOB->CRH&=0XFFFFFFF0;//清除PB8的原有状态
GPIOB->CRH|=0X00000003;//设置PB8为输入,50MHZ
GPIOB->ODR&=~(1<<8); //设置PB8输出低电平
}
以上是初始化函数,步骤依次是1)初始化外设时钟,用到那个外设就初始化哪个外设时钟
2)配置io口输入输出状态
3)配置io口输出的高低电平
|