目录
GPIO
读取电平
电平设置
翻转IO口电平
NVIC
中断回调函数
switch选择中断线
定时器中断回调函数
UART中断回调函数
Timers
定时器开关函数
开启定时器及中断
关闭定时器及中断
开启定时器
关闭定时器
PWM开启定时器
PWM关闭定时器
读写定时器相关值的函数
设置比较值
获取当前比较值
设置重载数值
获取重载数值
设置计数值
获取计数值
微秒级延时函数(放在tim.c中)
开启定时器,并修改htimx
UART
串口发送数据函数
printf格式化输出
改写printf调用的fputc函数(放在main函数前)
调用printf
串口接收数据函数
scanf接收数据
改写scanf调用的fgetc函数(放在main函数前)
调用scanf
利用中断的串口发送数据函数
利用中断的串口接收数据函数(使用数组应用全局变量)
ADC
ADC启动函数
ADC关闭函数
ADC启动函数并打开中断
ADC关闭函数并关闭中断
查询ADC转化完成标志(等待转换)
获取ADC数值
使用DMA获取ADC数值(创建volatile uint16_t adc_value[4];数组)
RTC
读取系统时间(时分秒)
读取系统日期(年月日)
获取日期时间结构体声明
打印范例
掉电恢复解决方案
GPIO
写入电平
- void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
- 例如:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
读取电平
- HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
- 例如:HAL_GPIO_ReadPin(GPIOH, GPIO_PIN_2);
电平设置
- GPIO_PIN_RESET 0
- GPIO_PIN_SET 1
翻转IO口电平
- void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
- 例如:HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
NVIC
中断回调函数
- void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {}
switch选择中断线
switch(GPIO_Pin)
{
case GPIO_PIN_2:
//内容1
break;
case GPIO_PIN_3:
//内容2
break;
case GPIO_PIN_13:
//内容3
break;
}
定时器中断回调函数
- void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {}
UART中断回调函数
发送中断回调
- void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {}
接收中断回调
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {}
ADC中断回调函数
- void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {}
Timers
定时器开关函数
开启定时器及中断
- HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
- 例如:HAL_TIM_Base_Start_IT(&htim2);
关闭定时器及中断
- HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim)
- 例如:HAL_TIM_Base_Stop_IT(&htim2);
开启定时器
- HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)
- 例如:HAL_TIM_Base_Start(&htim2);
关闭定时器
- HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim)
- 例如:HAL_TIM_Base_Stop(&htim2);
PWM开启定时器
- HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
- 例如:HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);
PWM关闭定时器
- HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
- 例如:HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3);
读写定时器相关值的函数
设置比较值
- __HAL_TIM_SetCompare (__HANDLE__, __CHANNEL__, __COMPARE__)
- 例如:__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_3,1000);
获取当前比较值
- __HAL_TIM_GetCompare (__HANDLE__, __CHANNEL__)
- 例如:__HAL_TIM_GetCompare(&htim3,TIM_CHANNEL_3);
设置重载数值
- __HAL_TIM_SetAutoreload (__HANDLE__, __AUTORELOAD__)
- 例如:__HAL_TIM_SetAutoreload(&htim3,1000);
获取重载数值
- __HAL_TIM_GetAutoreload (__HANDLE__)
- 例如:__HAL_TIM_GetAutoreload(&htim3);
设置计数值
- __HAL_TIM_SetCounter (__HANDLE__,__COUNTER__)
- 例如:__HAL_TIM_SetCounter(&htim3,1000);
获取计数值
- __HAL_TIM_GetCounter (__HANDLE__)
- 例如:__HAL_TIM_GetCounter(&htim3);
微秒级延时函数(放在tim.c中)
开启定时器,并修改htimx
void delay_us(uint16_t us)
{
uint16_t differ = 0xffff-us-5;
__HAL_TIM_SET_COUNTER(&htim7,differ); //设定TIM7计数器起始值
HAL_TIM_Base_Start(&htim7); //启动定时器
while(differ < 0xffff-5)
{ //判断
differ = __HAL_TIM_GET_COUNTER(&htim7); //查询计数器的计数值
}
HAL_TIM_Base_Stop(&htim7);
}
UART
串口发送数据函数
- HAL_UART_Transmit(UART_HandleTypeDef *huart,uint8_t *pData,uint16_t Size,uint32_t Timeout)
- 例如:HAL_UART_Transmit(&huart1,(uint8_t*)"wangzenb",8,0xFFFFF);
printf格式化输出
改写printf调用的fputc函数(放在main函数前)
int fputc(int c,FILE *stream)
{
uint8_t ch[1]={c};
HAL_UART_Transmit(&huart1,ch,1,0xFFFFF);
return c;
}
调用printf
- 例如:printf("wangzenb%d\n\r",123);
串口接收数据函数
- HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- 例如:HAL_UART_Receive(&huart1,buf,3,0xFFFF);
scanf接收数据
改写scanf调用的fgetc函数(放在main函数前)
int fgetc(FILE *stream)
{
uint8_t ch[1];
HAL_UART_Receive(&huart1,ch,1,0xFFFF);
return ch[0];
}
调用scanf
- 例如:scanf("%d",&val);
利用中断的串口发送数据函数
- HAL_UART_Transmit_IT(UART_HandleTypeDef *huart,uint8_t *pData,uint16_t Size)
- 例如:HAL_UART_Transmit_IT(&huart1,(uint8_t*)"wangzenb",8);
利用中断的串口接收数据函数(使用数组应用全局变量)
- HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
- 例如:HAL_UART_Receive_IT(&huart1,buf,3);
ADC
ADC启动函数
- HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc)
- 例如:HAL_ADC_Start(&hadc1);
ADC关闭函数
- HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc)
- 例如:HAL_ADC_Stop(&hadc1);
ADC启动函数并打开中断
- HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc)
- 例如:HAL_ADC_Start_IT(&hadc1);
ADC关闭函数并关闭中断
- HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc)
- 例如:HAL_ADC_Stop_IT(&hadc1);
查询ADC转化完成标志(等待转换)
- HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc,uint32_t Timeout)
- HAL_ADC_PollForConversion(&hadc1,50);
获取ADC数值
- uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc)
- 例如:HAL_ADC_GetValue(&hadc1);
使用DMA获取ADC数值(创建volatile uint16_t adc_value[4];数组)
- HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)
- 例如:HAL_ADC_Start_DMA(&hadc1,(uint32_t*)adc_value,8);
RTC
读取系统时间(时分秒)
- HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
- 例如:HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);
读取系统日期(年月日)
- HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
- 例如:HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);
获取日期时间结构体声明
- RTC_DateTypeDef GetData; //获取日期结构体
- RTC_TimeTypeDef GetTime; //获取时间结构体
打印范例
- printf("%02d/%02d/%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date);
- printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds);
掉电恢复解决方案
rtc.c中声明函数文章来源:https://www.toymoban.com/news/detail-833838.html
- void user_CheckRtcBkup()
- {
- HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, 1);
- }
修改void MX_RTC_Init(void)函数文章来源地址https://www.toymoban.com/news/detail-833838.html
- /* USER CODE BEGIN Check_RTC_BKUP */
- if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1)==1)
- {
- return;
- }
- /* USER CODE END Check_RTC_BKUP */
到了这里,关于STM32 HAL库常用函数(早期学习备份版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!