找回密码
 立即注册
首页 业界区 安全 MCU点灯实验小结

MCU点灯实验小结

慕疼 2025-6-8 13:23:58
设备采用芯片:STM32F407ZET6
4个LED灯,网络标号分别为LED0 ,LED1,FSMC D10,FSMC D11。对应的引脚号分别为PF9,PF10,PE12,PE13。
GPIO外设基本概念

General-Purpose Input Output,通用型输入输出的,也简称I/O口,有时也简写为IO口。用于电信号的传递,以实现与外部器件的通信、控制外部器件或者采集外部器件数据的功能。(在本次所用芯片中,共有114个GPIO引脚。)

对于MCU设备和传感器之间,一般采用TTL电平信号,即传输的电平信号<strong>>2.4V就表示高电平,BSRRL =GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_13| GPIO_Pin_14;     GPIOE->BSRRL = GPIO_Pin_13| GPIO_Pin_14;        return 0;}[/code]2. 代码拆分:

定义外设的结构体变量

GPIO外设结构体原型及代表含义如下:
  1. //1.定义变量
  2. GPIO_InitTypeDef  GPIO_InitStructureF;//F端口
  3. GPIO_InitTypeDef  GPIO_InitStructureE;//E端口
  4. int main()//中文注释
  5. {
  6.         //2.时钟控制
  7.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
  8.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
  9.        
  10.    //3.设置结构体变量 F端口
  11.    GPIO_InitStructureF.GPIO_Pin =  GPIO_Pin_9| GPIO_Pin_10;
  12.    GPIO_InitStructureF.GPIO_Mode = GPIO_Mode_OUT;
  13.    GPIO_InitStructureF.GPIO_OType = GPIO_OType_PP;//推挽模式PP(都可以输出),开漏输出OD(只能输出低电平)
  14.    GPIO_InitStructureF.GPIO_Speed = GPIO_Speed_2MHz;
  15.    GPIO_InitStructureF.GPIO_PuPd = GPIO_PuPd_NOPULL;
  16.    GPIO_Init(GPIOF, &GPIO_InitStructureF);
  17.        
  18.    //3.设置结构体变量 E端口
  19.    GPIO_InitStructureE.GPIO_Pin =  GPIO_Pin_13| GPIO_Pin_14;
  20.    GPIO_InitStructureE.GPIO_Mode = GPIO_Mode_OUT;
  21.    GPIO_InitStructureE.GPIO_OType = GPIO_OType_PP;
  22.    GPIO_InitStructureE.GPIO_Speed = GPIO_Speed_2MHz;
  23.    GPIO_InitStructureE.GPIO_PuPd = GPIO_PuPd_NOPULL;
  24.    GPIO_Init(GPIOE, &GPIO_InitStructureE);
  25.          while (1)
  26.    {
  27.            //亮灯
  28.      GPIOF->BSRRL =GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_13| GPIO_Pin_14;
  29.      GPIOE->BSRRL = GPIO_Pin_13| GPIO_Pin_14;
  30.         return 0;
  31. }
复制代码
时钟控制

打开GPIO的外设时钟
  1. typedef struct
  2. {
  3.   uint32_t GPIO_Pin;              
  4.     //指定要配置的GPIO引脚。此参数可以是以下参数之一,设置与引脚号对应的编号
  5.     /*
  6. #define GPIO_Pin_0                 ((uint16_t)0x0001)  
  7. #define GPIO_Pin_1                 ((uint16_t)0x0002)
  8. ...
  9. #define GPIO_Pin_15                ((uint16_t)0x8000)  
  10. #define GPIO_Pin_All               ((uint16_t)0xFFFF)  
  11. ...
  12. */
  13.   GPIOMode_TypeDef GPIO_Mode;     
  14.     // 指定选定引脚的操作模式,设置为以下参数之一
  15.     /*
  16.   GPIO_Mode_IN   = 0x00, //输入模式,用得较多
  17.   GPIO_Mode_OUT  = 0x01, //输出模式,用的最多
  18.   GPIO_Mode_AF   = 0x02, //复用模式,偶尔用
  19.   GPIO_Mode_AN   = 0x03  //模拟模式
  20.     */
  21.   GPIOSpeed_TypeDef GPIO_Speed;   
  22.     // 指定选定引脚的速度,设置为以下参数之一,输出速度指的是引脚电平的翻转速度,如果选择高速,则会增加功耗和噪声。
  23.     /*
  24.   GPIO_Low_Speed     = 0x00, //2MHz
  25.   GPIO_Medium_Speed  = 0x01, //25MHz
  26.   GPIO_Fast_Speed    = 0x02, //50MHz
  27.   GPIO_High_Speed    = 0x03  //100MHz
  28.     */
  29.                                        
  30.   GPIOOType_TypeDef GPIO_OType;  
  31.     //指定选定引脚的操作输出类型,设置为以下参数之一
  32.     /*
  33.   GPIO_OType_PP = 0x00, //推挽输出,可以输出高和低电平
  34.   GPIO_OType_OD = 0x01  //开漏输出,只能输出低电平,不能输出高电平
  35.     */
  36.   GPIOPuPd_TypeDef GPIO_PuPd;     
  37.     //指定选定接点的操作上拉/下拉,即GPIO引脚的内部电阻,设置为以下参数之一
  38.    /*
  39.   GPIO_PuPd_NOPULL = 0x00,
  40.   GPIO_PuPd_UP     = 0x01,//上拉电阻,当外部没有电平输入或输出时,可以给GPIO引脚一个默认的高电平状态
  41.   GPIO_PuPd_DOWN   = 0x02//下拉电阻,当外部没有电平输入或输出时,可以给GPIO引脚一个默认的低电平状态
  42.    */
  43.     }GPIO_InitTypeDef;
复制代码
​       因为STM32属于低功耗的MCU,而为了降低功耗,所以STM32的MCU在复位之后默认会关闭绝大多数的外设的时钟,所以用户想要使用MCU内部的某个外设,就必须打开该外设的时钟(clock)。
对GPIO外设的初始化结构体中成员进行赋值

根据GPIO外设结构体原型,对每一个结构体成员进行赋值,解释如下:
  1. //函数原型
  2. void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
  3. //用法示例
  4. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
复制代码
通过init函数对把GPIO结构体中的值写入到GPIO端口寄存器,完成初始化
  1. GPIO_InitStructureE.GPIO_Pin =  GPIO_Pin_13| GPIO_Pin_14;//对13和14引脚进行操作
  2. GPIO_InitStructureE.GPIO_Mode = GPIO_Mode_OUT;//输出模式
  3. GPIO_InitStructureE.GPIO_OType = GPIO_OType_PP;//推挽输出
  4. GPIO_InitStructureE.GPIO_Speed = GPIO_Speed_100MHz;//设置速率,默认选最高
  5. GPIO_InitStructureE.GPIO_PuPd = GPIO_PuPd_NOPULL;
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册