蓝桥杯嵌入式要用到的函数
时间: 2025-07-11 15:44:42 浏览: 3
<think>好的,我现在需要回答用户关于蓝桥杯嵌入式比赛中常用函数的问题。首先,用户可能正在准备比赛,需要了解比赛中常用的函数,以便更好地编写代码。蓝桥杯嵌入式通常使用STM32微控制器,特别是基于HAL库的开发,所以我要围绕HAL库和相关的模块来组织内容。
接下来,我需要回忆蓝桥杯嵌入式比赛的常见模块,比如GPIO、定时器、ADC、LCD、按键、EEPROM等。每个模块都有一些常用的函数,用户可能需要这些函数的具体用法和示例。
首先,GPIO部分,HAL_GPIO_WritePin和HAL_GPIO_TogglePin是基础,用于控制LED或继电器。还有读取输入的函数,如HAL_GPIO_ReadPin。这些函数在配置好引脚后经常使用,可能需要举例说明。
然后是定时器,PWM输出是重点,比如HAL_TIM_PWM_Start和__HAL_TIM_SET_COMPARE。定时器中断也需要处理,HAL_TIM_Base_Start_IT和对应的回调函数HAL_TIM_PeriodElapsedCallback。这些对于控制电机或生成精确时序很重要。
接下来是ADC,HAL_ADC_Start和HAL_ADC_PollForConversion用于读取模拟信号,比如电位器或传感器。需要提到轮询方式,因为比赛中可能不常用中断或DMA,但如果有的话也可以简单提一下。
LCD显示部分,蓝桥杯通常提供自己的驱动函数,比如LCD_DisplayString或LCD_DisplayChar。用户需要知道如何调用这些函数来显示信息,可能还需要初始化函数如LCD_Init。
按键处理涉及扫描函数,比如使用HAL_GPIO_ReadPin读取按键状态,并结合消抖处理。可能需要提到外部中断的方式,但轮询更常见。
EEPROM方面,使用I2C通信,HAL_I2C_Mem_Write和HAL_I2C_Mem_Read是常用的,需要指定设备地址和内存地址。注意等待操作完成,避免数据错误。
此外,中断处理函数如EXTI0_IRQHandler,以及回调函数HAL_GPIO_EXTI_Callback可能需要用户重写,用于处理外部中断事件。
还要提醒用户注意时钟配置,使用STM32CubeMX生成初始化代码,确保外设时钟正确开启。同时,结合比赛提供的库函数,可能有一些特定函数需要参考官方资料。
最后,要建议用户多实践,查阅官方提供的例程和数据手册,这些资源能帮助他们更熟练地使用这些函数。结构上分模块列出函数,每个函数给出用途、参数说明和示例,保持清晰易懂。确保使用正确的中文术语,避免技术术语错误,并检查LaTeX格式是否符合要求,比如行内公式用$...$,独立公式用$$...$$,但在这个问题中可能公式较少,但如果有数学表达式需要注意格式。</think>在蓝桥杯嵌入式竞赛(基于STM32平台)中,常用函数主要围绕**HAL库**和**竞赛提供的驱动库**展开。以下是核心模块及关键函数分类说明:
---
### 一、GPIO控制
1. **引脚输出控制**
- `HAL_GPIO_WritePin(GPIOx, GPIO_Pin, PinState)`
**用途**:设置引脚高低电平(如控制LED、继电器)
**参数**:GPIO端口(如`GPIOB`)、引脚号(如`GPIO_PIN_5`)、状态(`GPIO_PIN_SET`/`GPIO_PIN_RESET`)
**示例**:
```c
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET); // PB5输出高电平
```
- `HAL_GPIO_TogglePin(GPIOx, GPIO_Pin)`
**用途**:翻转引脚电平(常用于LED闪烁)
**示例**:
```c
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5); // PB5电平翻转
```
2. **引脚输入读取**
- `HAL_GPIO_ReadPin(GPIOx, GPIO_Pin)`
**用途**:读取引脚电平(如按键检测)
**返回值**:`GPIO_PIN_SET`或`GPIO_PIN_RESET`
**示例**:
```c
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET) {
// 处理按键按下事件
}
```
---
### 二、定时器(TIM)
1. **PWM输出**
- `HAL_TIM_PWM_Start(&htimx, TIM_CHANNEL_y)`
**用途**:启动PWM输出(控制舵机、电机速度)
**参数**:定时器句柄(如`&htim3`)、通道号(如`TIM_CHANNEL_1`)
- `__HAL_TIM_SET_COMPARE(&htimx, TIM_CHANNEL_y, value)`
**用途**:设置PWM占空比(`value`范围与ARR寄存器相关)
**示例**:
```c
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 500); // 占空比=500/ARR
```
2. **定时中断**
- `HAL_TIM_Base_Start_IT(&htimx)`
**用途**:启动定时器中断(周期性任务)
- 回调函数 `HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)`
**用途**:定时器中断服务函数中调用,需用户重写
**示例**:
```c
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == TIM2) {
// 每1ms执行的任务
}
}
```
---
### 三、ADC模数转换
1. **启动ADC采样**
- `HAL_ADC_Start(&hadcx)`
**用途**:启动ADC转换(如读取电位器电压)
- `HAL_ADC_PollForConversion(&hadcx, timeout)`
**用途**:等待转换完成(轮询模式)
- `HAL_ADC_GetValue(&hadcx)`
**用途**:获取ADC采样值
**示例**:
```c
HAL_ADC_Start(&hadc1);
if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK) {
uint32_t adc_val = HAL_ADC_GetValue(&hadc1);
}
```
---
### 四、LCD显示
1. **基础显示函数**(依赖竞赛提供的驱动库)
- `LCD_DisplayString(u8 line, u8 *str)`
**用途**:在指定行显示字符串
- `LCD_DisplayChar(u8 x, u8 y, u8 chr)`
**用途**:在坐标(x,y)显示单个字符
- `LCD_Init()`
**用途**:初始化LCD屏幕
---
### 五、按键扫描
1. **矩阵按键扫描**(需自行实现或使用官方例程)
- 常用方法:逐行扫描法,结合`HAL_GPIO_ReadPin`
**伪代码逻辑**:
```c
uint8_t Key_Scan() {
for (int row = 0; row < ROW_NUM; row++) {
HAL_GPIO_WritePin(ROW_PORT, ROW_PINS[row], GPIO_PIN_RESET);
for (int col = 0; col < COL_NUM; col++) {
if (HAL_GPIO_ReadPin(COL_PORT, COL_PINS[col]) == GPIO_PIN_RESET) {
return row * COL_NUM + col; // 返回按键编号
}
}
HAL_GPIO_WritePin(ROW_PORT, ROW_PINS[row], GPIO_PIN_SET);
}
return 0xFF; // 无按键按下
}
```
---
### 六、EEPROM读写(AT24C02)
1. **I2C通信函数**
- `HAL_I2C_Mem_Write(&hi2cx, DevAddress, MemAddress, I2C_MEMADD_SIZE_8BIT, pData, Size, Timeout)`
**用途**:写入数据到EEPROM
- `HAL_I2C_Mem_Read(&hi2cx, DevAddress, MemAddress, I2C_MEMADD_SIZE_8BIT, pData, Size, Timeout)`
**示例**:
```c
uint8_t data = 0x55;
HAL_I2C_Mem_Write(&hi2c1, 0xA0, 0x00, I2C_MEMADD_SIZE_8BIT, &data, 1, 100);
```
---
### 七、中断处理
1. **外部中断回调函数**
- `void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)`
**用途**:GPIO外部中断触发时调用,需用户重写
**示例**:
```c
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
if (GPIO_Pin == GPIO_PIN_0) {
// 处理PA0引脚的中断事件
}
}
```
---
### 八、其他关键点
1. **时钟配置**:使用`SystemClock_Config()`(由STM32CubeMX生成)确保外设时钟正确。
2. **官方驱动库**:比赛提供的LCD、按键等驱动函数需仔细阅读手册。
建议结合**STM32CubeMX配置工具**生成初始化代码,并参考蓝桥杯官方提供的例程进行实践练习。
阅读全文
相关推荐


















