CubeMX教学以及HAL库基本函数的使用,这里记录常见的CubeMX的常见用法:IO口、中断、定时器、PWM。这里感谢伍大佬的答疑,大佬真是太强了,问什么会什么,66666。文章如果有什么错误的地方也欢迎大家指出,本人菜鸟一枚,还望海涵。
一、IO口的设置
这里先理解输入设置成上拉、下拉选哪个。上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平,所以对接地的按键,要有电平的突变应该使无信号输入时为高,按下按键接地电平才能突变
1、配置
2、函数HAL_GPIO_WritePin的使用
HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);
表示将PB15设置为高电平。
我的板子灯是PB15,14,13,12,加上延时写了个流水灯:
3、函数 HAL_GPIO_ReadPin的使用
HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5)==GPIO_PIN_RESET
4、User Lable的使用
二、串口通讯
1、逻辑代码
//发送数据 (这个是阻塞式发送,发送完才会接收)
HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData,
uint16_t Size, uint32_t Timeout);
HAL_UART_Transmit(&huart1,temp,5,50);
串口地址 数据 长度 超时时间
//接收数据
HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData,
uint16_t Size, uint32_t Timeout);
HAL_UART_Receive(&huart1,temp,5,50);
串口地址 数据 长度 超时时间
//发送中断 (这个中断式发送)
HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *
pData, uint16_t Size);
//接收中断
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData
, uint16_t Size);
//使用DMA发送 (这个是DMA的方式)
HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *
pData, uint16_t Size);
//使用DMA接收
HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *
pData, uint16_t Size);
//DMA暂停
HAL_UART_DMAPause(UART_HandleTypeDef *huart);
//DMA恢复
HAL_UART_DMAResume(UART_HandleTypeDef *huart);
//DMA停止
HAL_UART_DMAStop(UART_HandleTypeDef *huart);
三、外部中断(先初始化,再写一个回调函数)
1、基本配置
2、回调函数:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
if(GPIO_Pin == PWM_PIN_0) {
pwm_value++; //业务代码,将pwm_value 加一
}
}
四、定时器的配置
1、基本配置
2、开启中断
3、代码编写
(1)先使能
HAL_TIM_Base_Start_IT(&htim1); //定时器1使能
(2)设置回调
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if (htim->Instance == htim1.Instance) {
...//定时器1中断业务
}
else if(htim-> Instance == htim2.Instance) {
...//定时器2中断业务
}
...
}
五、PWM
下面是正、负向的介绍
1、软件配置
2、 代码的编写
(1)使能
HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_y);
HAL_TIM_PWM_Start(&htimx1,TIM_CHANNEL_1);
(2)设置占空比
__HAL_TIM_SET_COMPARE(&htimx, TIM_CHANNEL_y, z);
__HAL_TIM_SET_COMPARE(&htimx1,TIM_CHANNEL_1, 50);
Z值的计算:
HAL库的基本函数用法大概也就学了这些。。感谢这俩天伍大佬的教导,小弟在此祝他老人家福如东海,寿比南山。