在初学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口输出的高低电平
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|