STM32F103ZET6之点亮发光二极管、按键检测、蜂鸣器发声实验

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则