CubeMx+STM32+HAL库

   日期:2021-03-10     浏览:93    评论:0    
核心提示:CubeMX教学以及HAL库基本函数的使用,这里记录常见的CubeMX的常见用法:IO口、中断、定时器、PWM。

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库的基本函数用法大概也就学了这些。。感谢这俩天伍大佬的教导,小弟在此祝他老人家福如东海,寿比南山。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服