• STM32F407 芯片的学习 day02 , led模块, key 模块, beep 模块


    1.GPIO  模块的原理图:


     


    2.首先介绍,led模块, 

    led  模块的引脚:

    LED1    ----PE8

    LED2   ----PE9

    LED3    ----PE10

    代码:

    led.h

    1. void delay(void);
    2. void ledinit(void);//初始化
    3. void select_led(int a);//假如a != 1 2 3 ,就关闭所有的灯
    4. void liushui_led(void);
    5. void close_led(void );//关闭所有的小灯

    led.c

    1. #include "stm32f4xx.h" //头文件
    2. #include "led.h"
    3. void delay()//延时函数
    4. {
    5. int b=5000000;
    6. while(b--)//形成延时函数
    7. {
    8. }
    9. }
    10. void ledinit()
    11. {
    12. //led 低电平驱动
    13. //3 个led 可控制,一个不可控制
    14. //二极管单向导通,阳极固定高电平,阴极输出高电平,led 灭
    15. //二极管单向导通,阳极固定高电平,阴极输出低电平,led 亮
    16. GPIO_InitTypeDef GIOSTRUCT;
    17. //1.配置时钟: 给个心跳。 选择需要的时钟频率
    18. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    19. //2.配置功能: 功能太多。 选择GPIO功能;
    20. GIOSTRUCT.GPIO_Mode=GPIO_Mode_OUT ; //输出模式 //引脚输出信号
    21. GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 |GPIO_Pin_10;//led 灯的引脚
    22. GIOSTRUCT.GPIO_PuPd=GPIO_PuPd_UP; //上拉电阻
    23. GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
    24. //外部无上拉电阻选择推挽输出, 外部有上拉电阻选择开漏输出
    25. GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
    26. GPIO_Init(GPIOE,&GIOSTRUCT);
    27. //GPIO_Init(GPIOE,&GIOSTRUCT);
    28. //3.操作引脚: 输出低电平 led 亮, 输出高电平 led灭
    29. //初始化
    30. GPIO_SetBits(GPIOE,GPIO_Pin_8 |GPIO_Pin_9 |GPIO_Pin_10 );//把灯都关了
    31. //GPIO_ResetBits 输出低电平
    32. //GPIO_SetBits 输出高电平
    33. }
    34. void select_led(int a)//假如a != 1 2 3 ,就关闭所有的灯
    35. {
    36. if(a==1)
    37. {
    38. GPIO_ResetBits(GPIOE,GPIO_Pin_8);//串口组, 引脚//打开第一个灯
    39. }
    40. if(a==2)
    41. {
    42. GPIO_ResetBits(GPIOE,GPIO_Pin_9);//串口组, 引脚//打开第二个灯
    43. }
    44. if(a==3)
    45. {
    46. GPIO_ResetBits(GPIOE,GPIO_Pin_10);//串口组, 引脚//打开第三个灯
    47. }
    48. }
    49. void close_led(void )//关闭所有的小灯
    50. {
    51. GPIO_SetBits(GPIOE,GPIO_Pin_8 |GPIO_Pin_9 |GPIO_Pin_10 );//把灯都关了
    52. }
    53. void liushui_led()//流水灯 , 功能: 从第一个灯 轮流闪烁 一直到最后一个灯,最后把所有的灯关闭。
    54. {
    55. GPIO_SetBits(GPIOE,GPIO_Pin_8 |GPIO_Pin_9 |GPIO_Pin_10 );//把灯都关了
    56. GPIO_ResetBits(GPIOE,GPIO_Pin_8);//串口组, 引脚//打开第一个灯
    57. delay();
    58. GPIO_SetBits(GPIOE,GPIO_Pin_8 |GPIO_Pin_9 |GPIO_Pin_10 );//把灯都关了
    59. GPIO_ResetBits(GPIOE,GPIO_Pin_9);//串口组, 引脚//打开第二个灯
    60. delay();
    61. GPIO_SetBits(GPIOE,GPIO_Pin_8 |GPIO_Pin_9 |GPIO_Pin_10 );//把灯都关了
    62. GPIO_ResetBits(GPIOE,GPIO_Pin_10);//串口组, 引脚//打开第三个灯
    63. delay();
    64. GPIO_SetBits(GPIOE,GPIO_Pin_8 |GPIO_Pin_9 |GPIO_Pin_10 );//把灯都关了
    65. }

    3.蜂鸣器模块

     

    蜂鸣器的引脚

    beep  ---- PB10

    代码:

    beep.h

    1. void beepinit(void);//初始化
    2. void openBeep(void);//打开蜂鸣器
    3. void closeBeep(void);//关闭蜂鸣器
    4. void shijianBeep(void);//响一下,停一下

    beep.c

    1. #include "stm32f4xx.h" //头文件
    2. #include "led.h"
    3. #include "beep.h"
    4. void beepinit(void)
    5. {
    6. //1.时钟问题解决
    7. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);//
    8. //2.引脚配置问题解决
    9. GPIO_InitTypeDef beepstruct;//设置变量
    10. beepstruct.GPIO_Mode= GPIO_Mode_OUT;//输出模式 //引脚输出信号
    11. beepstruct.GPIO_OType=GPIO_OType_PP;//外部无上拉电阻选择推挽输出, 外部有上拉电阻选择开漏输出
    12. beepstruct.GPIO_Pin=GPIO_Pin_10;//引脚的编号是哪个
    13. beepstruct.GPIO_PuPd=GPIO_PuPd_UP; //上拉电阻
    14. beepstruct.GPIO_Speed=GPIO_Low_Speed;配置速度
    15. GPIO_Init(GPIOB,&beepstruct);
    16. //3.初始化
    17. GPIO_ResetBits(GPIOB,GPIO_Pin_10);//设置输出低电平 ,开始的时候让他不响
    18. }
    19. void openBeep(void)//打开蜂鸣器
    20. {
    21. //GPIO_WriteBit(GPIOB,GPIO_Pin_10,Bit_SET);//打开蜂鸣器
    22. GPIO_SetBits(GPIOB,GPIO_Pin_10);//打开蜂鸣器
    23. }
    24. void closeBeep(void)//关闭蜂鸣器
    25. {
    26. //GPIO_WriteBit(GPIOB,GPIO_Pin_10,Bit_RESET);//关闭蜂鸣器
    27. GPIO_ResetBits(GPIOB,GPIO_Pin_10);//设置输出低电平 ,开始的时候让他不响
    28. }
    29. void shijianBeep(void)//响一下,停一下
    30. {
    31. openBeep();
    32. int a=1;
    33. while(a--)
    34. {
    35. delay();
    36. }
    37. closeBeep();
    38. a=1;
    39. while(a--)
    40. {
    41. delay();
    42. }
    43. }

     


    4.key   按键模块

    按键的引脚:

    key1  ------PE4

    key2  ------PE5

    key3   -------PE6

    key4  -------PC13

    代码:

    key.h

    1. void key_init(void);//初始化key
    2. void key_youxi(void);//key 按键的游戏

    key.c

    1. #include "stm32f4xx.h" //头文件
    2. #include "led.h"
    3. #include "beep.h"
    4. #include "key.h"
    5. void key_init(void)//初始化key
    6. {
    7. //初始key1 key2 key3
    8. //1.时钟问题解决
    9. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    10. GPIO_InitTypeDef keystruct;//设置变量
    11. keystruct.GPIO_Mode=GPIO_Mode_IN; //输入模式 //引脚输入信号
    12. keystruct.GPIO_Pin=GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6;// 三个按键一起初始化
    13. //keystruct.GPIO_OType 输出类型不需要
    14. keystruct.GPIO_PuPd=GPIO_PuPd_UP;需要上拉电阻
    15. keystruct.GPIO_Speed=GPIO_Low_Speed;//速度
    16. GPIO_Init(GPIOE,&keystruct);
    17. //初始化
    18. GPIO_SetBits(GPIOE,GPIO_Pin_4|GPIO_Pin_5 |GPIO_Pin_6);//给这些按键高电平 key1 key2 key3
    19. //初始化 key4
    20. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
    21. GPIO_InitTypeDef keystruct1;//设置变量
    22. keystruct1.GPIO_Mode=GPIO_Mode_IN; //输入模式 //引脚输入信号
    23. keystruct1.GPIO_Pin=GPIO_Pin_13;// 按键一起初始化
    24. //keystruct.GPIO_OType 输出类型不需要
    25. keystruct1.GPIO_PuPd=GPIO_PuPd_UP;需要上拉电阻
    26. keystruct1.GPIO_Speed=GPIO_Low_Speed;//速度
    27. GPIO_Init(GPIOC,&keystruct1);
    28. GPIO_SetBits(GPIOC,GPIO_Pin_13);//给这些按键高电平 key4
    29. }
    30. void key_youxi(void)//key 按键的游戏
    31. {
    32. //PE4 -key1 :打开三个灯
    33. //PE5 -key2 :关闭三个灯
    34. //PE6 key3 :打开蜂鸣器+寻个灯
    35. //PC13 -key4 :关闭蜂鸣器+一+三灯剩一个2key2关掉
    36. if(!GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4))//这个函数是高电平返回 1 低电平 返回 0
    37. {
    38. select_led(1);
    39. select_led(2);
    40. select_led(3);
    41. }
    42. if(!GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_5))//这个函数是高电平返回 1 低电平 返回 0
    43. {
    44. close_led();//关闭所有的灯
    45. }
    46. if(!GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_6))//这个函数是高电平返回 1 低电平 返回 0
    47. {
    48. openBeep();//打开蜂鸣器
    49. select_led(1);
    50. select_led(2);
    51. select_led(3);
    52. }
    53. if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13))//这个函数是高电平返回 1 低电平 返回 0
    54. {
    55. closeBeep();
    56. close_led();
    57. select_led(2);
    58. }
    59. }

     

  • 相关阅读:
    升压芯片很简单(三),FSB628升压芯片大串讲
    绘制一条透明背景的trace,并保存;
    vue模板语法02
    Linux系列---【查看mac地址】
    (附源码)计算机毕业设计SSM基于的服装商城系统
    idea工具中maven的Lifecycle功能讲解
    C++ 漫谈哈夫曼树
    JAVA党员信息管理计算机毕业设计Mybatis+系统+数据库+调试部署
    gRPC之.Net6中的客户端和服务端共用proto协议文件
    JVM总结
  • 原文地址:https://blog.csdn.net/she666666/article/details/126794252