问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

蓝桥杯嵌入式竞赛常用硬件模块配置方法详解

创作时间:
作者:
@小白创作中心

蓝桥杯嵌入式竞赛常用硬件模块配置方法详解

引用
CSDN
1.
https://blog.csdn.net/2301_80818909/article/details/145553562

蓝桥杯嵌入式竞赛是许多电子工程和计算机科学学生的重要比赛,掌握其常用硬件模块的配置方法是取得好成绩的关键。本文将详细介绍蓝桥杯嵌入式竞赛中常用的硬件模块配置方法,包括cubemx时钟树配置、LED控制、按键检测等。

cubemx时钟树配置

时钟树的配置是嵌入式系统开发中的重要环节,特别是在蓝桥杯竞赛中,需要严格遵循题目要求的频率。以下是一个示例配置:

需要注意的是,时钟树的配置方法不局限于图中所示,可以通过调节第4、第5步的地方保证SYSCLK(MHz)处的频率为80,符合蓝桥杯题目要求即可。如果题目要求其他频率,也可以通过这些地方调整达到题目要求。

LED控制

LED控制是嵌入式系统中最基本的功能之一。在蓝桥杯竞赛中,通常需要控制多个LED灯的状态。以下是一个具体的配置示例:

将PC8~PC15、PD2在cubemx上设置为GPIO_Output模式。

控制所有LED的函数

void Led_Disp(uint8_t ucled)
{
  HAL_GPIO_WritePin(GPIOC,0xFF<<8,GPIO_PIN_SET);//指定所有灯灭
  HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
  
  HAL_GPIO_WritePin(GPIOC,ucled<<8,GPIO_PIN_RESET);
  HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}  

该函数的参数是一个字节,0x00 = 0000 0000,每个位代表一个LED灯,从左往右分别代表LED1-LED8:

  • LED1 : 0x01
  • LED2 : 0x02
  • LED3 : 0x04
  • LED4 : 0x08
  • LED5 : 0x10
  • LED6 : 0x20
  • LED7 : 0x40
  • LED8 : 0x80

流水灯演示

uint8_t leds[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
while (1)
{
    uint i;
    for(i=0;i<8;i++)
    {
        Led_Disp(leds[i]);
        HAL_Delay(100);
    }
}  

控制单个LED的函数

uint8_t led_sta;
void Led_Pro(uint8_t num,uint8_t sta)//单独开关灯函数
{
    uint8_t pos=0x01<<(num-1);
    led_sta=(led_sta&(~pos))|(pos*sta);
    Led_Disp(led_sta);
}  

LED演示

Led_Pro(6,1);//打开led6
Led_Pro(6,1);//关闭led6  

按键检测

按键检测是嵌入式系统中常见的输入方式。在蓝桥杯竞赛中,通常需要检测多个按键的状态。以下是一个具体的配置示例:

将PB0、PB1、PB2、PA0在cubemx上配置为GPIO_Input模式:

需要注意的是,如果按键想用外部中断的话,PA0、PB0是同一个中断线,外部中断只能用三个按键,剩下的一个按键还是需要读写操作,所以最好还是都使用读写操作。

按键初始化代码

uint8_t Key_Scan(void)
{
    uint8_t key_val=0;
    if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET)
    {
        key_val = 1;
    }
    if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==GPIO_PIN_RESET)
    {
        key_val = 2;
    }
    if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET)
    {
        key_val = 3;
    }
    if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)
    {
        key_val = 4;
    }
    return key_val;
}  

以上就是蓝桥杯嵌入式竞赛中常用的硬件模块配置方法。希望对大家有所帮助。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号