CubeMX教学以及HAL库基本函数的使用,这里记录常见的CubeMX的常见用法:IO口、中断、定时器、PWM。这里感谢伍大佬的答疑,大佬真是太强了,问什么会什么,66666。文章如果有什么错误的地方也欢迎大家指出,本人菜鸟一枚,还望海涵。
这里先理解输入设置成上拉、下拉选哪个。上拉电阻的目的是为了保证在无信号输入时输入端的电平为高电平,所以对接地的按键,要有电平的突变应该使无信号输入时为高,按下按键接地电平才能突变
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,加上延时写了个流水灯:
HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5)==GPIO_PIN_RESET
//发送数据 (这个是阻塞式发送,发送完才会接收)
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);
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
if(GPIO_Pin == PWM_PIN_0) {
pwm_value++; //业务代码,将pwm_value 加一
}
}
(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中断业务
}
...
}
HAL_TIM_PWM_Start(&htimx,TIM_CHANNEL_y);
HAL_TIM_PWM_Start(&htimx1,TIM_CHANNEL_1);
__HAL_TIM_SET_COMPARE(&htimx, TIM_CHANNEL_y, z);
__HAL_TIM_SET_COMPARE(&htimx1,TIM_CHANNEL_1, 50);