HAL库常用

一、GPIO通用

1
2
3
4
5
6
7
8
9
10
11
12
13
// 1. 写引脚:置1/0
HAL_GPIO_WritePin(GPIOx,GPIO_Pin,GPIO_PIN_SET); //置高

HAL_GPIO_WritePin(GPIOx,GPIO_Pin,GPIO_PIN_RESET); //置低

// 2. 读取引脚电平
GPIO_PinState state = HAL_GPIO_ReadPin(GPIOx,GPIO_Pin);

// 3. 反转电平
HAL_GPIO_TogglePin(GPIOx,GPIO_Pin);

// 4. 毫秒延时
HAL_Delay(ms);

二、UART串口

1. 阻塞收发

1
2
3
4
5
//发送数据
HAL_UART_Transmit(&huart1,dart,len,100);

//接收数据
HAL_UART_Receive(&huart1,data,len,100);

2. 中断收发

1
2
// 开启接收中断
HAL_UART_Receive_IT(&huart1,&rxBuffer,1);

3. 中断回调函数

1
2
3
4
5
6
7
8
9
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart == &huart1)
{
//处理收到的数据
//重新开启接收中断(必须写)
HAL_UART_Receive_IT(&huart1,&rxBuffer,1);
}
}

4. printf重定向

1
2
3
4
5
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,100);
return ch;
}

三、定时器TIM(定时 + PWM)

1. 开启定时器中断

1
HAL_TIM_Base_Start_IT(&htim2);

2. 定时器中断回调

1
2
3
4
5
6
7
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim == &htim2)
{
//定时任务
}
}

3. PWM输出(呼吸灯、电机)

1
2
3
4
5
//开启PWM
HAL_TIM_PWM_start(&htim3, TIM_CHANNEL_1);

//修改占空比(0~65535)
__HAL_TIM_SETCOMPARE(&htim3,TIM_CHANNEL_1,val);

四、ADC数模转换(读模拟量)

1. 单次采集

1
2
3
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,100);
int val = HAL_ADC_GetValue(&hadc1);

2. DMA采集(不占CPU)

1
HAL_ADC_Start_DMA(&hadc1, buf, len);

五、DMA数据搬运(高效必备)

1
2
//串口DMA发送
HAL_UART_Transmit_DMA(&huart,data,len);

六、I2C(OLED、传感器)

1
2
3
4
5
//写数据
HAL_I2C_Mem_Write(&hi2c1, addr, reg, 1, data, len, 100);

//读数据
HAL_I2C_Mem_Read(&hi2c1, add, reg, 1, data, len, 100);

七、中断通用(EXIT外部中断)

1
2
3
4
5
6
7
void HAL_GPIO_EXIT_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == KEY_Pin)
{
//按键触发
}
}

八、常用宏

1
2
3
4
5
6
7
8
9
10
11
// 使能/失能中断
__enable_irq();
__disable_irq();

// 获取系统时钟
HAL_GetTick(); // 返回开机毫秒数

// 位操作
SET_BIT(REG, BIT);
CLEAR_BIT(REG, BIT);
READ_BIT(REG, BIT);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1. HAL_GPIO_WritePin
2. HAL_GPIO_ReadPin
3. HAL_GPIO_TogglePin
4. HAL_Delay
5. HAL_UART_Transmit
6. HAL_UART_Receive
7. HAL_UART_Receive_IT
8. HAL_UART_RxCpltCallback
9. printf
10. HAL_TIM_Base_Start_IT
11. HAL_TIM_PeriodElapsedCallback
12. HAL_TIM_PWM_Start
13. __HAL_TIM_SET_COMPARE
14. HAL_ADC_Start
15. HAL_ADC_GetValue
16. HAL_GPIO_EXTI_Callback
17. HAL_I2C_Mem_Write
18. HAL_I2C_Mem_Read
19. HAL_GetTick
20. __enable_irq / __disable_irq