it编程 > 硬件开发 > stm32

STM32HAL库常用库函数说明

81人参与 2024-08-06 stm32

系统函数

hal_delay(延时函数)

void hal_delay(uint32_t delay);
参数说明
delay延时时间
数据类型:unsigned int 32位
返回值无返回值

gpio

hal_gpio_writepin(gpio引脚电平设置)

void hal_gpio_writepin(gpio_typedef *gpiox, uint16_t gpio_pin, gpio_pinstate pinstate);
参数说明
*gpiox引脚选泽,参数范围:gpioa~gpioc等
gpio_pin引脚编号选择,参数范围:gpio_pin_0~gpio_pin_15等
pinstate引脚状态设置,参数范围:gpio_pin_set:高电平
gpio_pin_reset:低电平
返回值无返回值
hal_gpio_writepin(gpiob,gpio_pin_15,gpio_pin_set);//设置pb15引脚为高电平
hal_delay(500);//延时500ms
hal_gpio_writepin(gpiob,gpio_pin_15,gpio_pin_reset);//设置pb15引脚为低电平
hal_delay(500);//延时500ms

hal_gpio_togglepin(gpio电平翻转)

void hal_gpio_togglepin(gpio_typedef *gpiox, uint16_t gpio_pin);
参数说明
*gpiox引脚选泽,参数范围:gpioa~gpioc等
gpio_pin引脚编号选择,参数范围:gpio_pin_0~gpio_pin_15等
返回值无返回值
hal_gpio_togglepin(gpiob,gpio_pin_15);//翻转gpio引脚电平
hal_delay(500);//延时500ms

hal_gpio_readpin(获取gpio引脚状态)

gpio_pinstate hal_gpio_readpin(gpio_typedef *gpiox, uint16_t gpio_pin);
参数说明
*gpiox引脚选泽,参数范围:gpioa~gpioc等
gpio_pin引脚编号选择,参数范围:gpio_pin_0~gpio_pin_15等
返回值返回gpio状态
gpio_pin_set:当前状态为高电平
gpio_pin_reset:当前状态为低电平
if(hal_gpio_readpin(gpiob,key1_pin)==gpio_pin_reset){//判断pb15引脚是否为低电平
	hal_gpio_writepin(led0_gpio_port,led0_pin,gpio_pin_set);//设置pb14引脚为高电平
}else{
	hal_gpio_writepin(led0_gpio_port,led0_pin,gpio_pin_reset);//设置pb14引脚为低电平
}

timer

hal_tim_base_start_it(打开定时器)

hal_statustypedef hal_tim_base_start_it(tim_handletypedef *htim);
参数说明
*htim定时器选择,范围:&htim1~&htim8等
hal_tim_base_start_it(&htim2);//开启定时器2中断

hal_tim_base_stop_it(关闭定时器中断)

hal_statustypedef hal_tim_base_stop_it(tim_handletypedef *htim);
参数说明
*htim定时器选择,范围:&htim1~&htim8等
  hal_tim_base_stop_it(&htim2);//关闭定时器2中断

usart(串口)

hal_uart_transmit(阻塞式发送函数)

hal_statustypedef hal_uart_transmit(uart_handletypedef *huart,uint8_t *pdata,uint16_t size,uint32_t timeout);
参数说明
*huart串口选择,范围:&huart1~&huart3等
*pdata发送的数据
size发送数据的长度
timerout超时时间
unsigned char str[]={"hello world"};//需要发送的数据

hal_uart_transmit(&huart1,str,sizeof(str)100);//串口发送数据

hal_uart_transmit_it(非阻塞式发送函数)

hal_statustypedef hal_uart_transmit_it(uart_handletypedef *huart,uint8_t *pdata,uint16_t size);
参数说明
*huart串口选择,范围:&huart1~&huart3等
*pdata发送的数据
size发送数据的长度
unsigned char str[]={"hello world"};//需要发送的数据
hal_uart_transmit_it(&huart1,str,sizeof(str)100);//串口发送数据


//串口发送完毕回调函数
void hal_uart_txcpltcallback(uart_handletypedef *huart){
  if(huart->instance==usart1){//判断是否是串口1产生的中断
    hal_gpio_togglepin(led0_gpio_port,led0_pin);//翻转pb5电平
  }
}

hal_uart_receive(阻塞式接收函数)——不推荐使用

hal_statustypedef hal_uart_receive(uart_handletypedef *huart,uint8_t *pdata,uint16_t size,uint32_t timeout);
参数说明
*huart串口选择,范围:&huart1~&huart3等
*pdata接收的数据存放位置
size需要接收的长度
timerout超时时间
unsigned char str[1];//接收数据存放位置
hal_uart_receive(&huart1,str,1);//串口接收数据

hal_uart_receive_it(非阻塞式接收函数)

hal_statustypedef hal_uart_receive_it(uart_handletypedef *huart,uint8_t *pdata,uint16_t size);
参数说明
*huart串口选择,范围:&huart1~&huart3等
*pdata接收的数据存放位置
size需要接收的长度
unsigned char str[1];//接收数据存放位置
hal_uart_receive_it(&huart1,str,1);//串口接收数据


//串口接收完毕回调函数
void hal_uart_rxcpltcallback(uart_handletypedef *huart){
  if(huart->instance==usart1){//判断是否为串口1产生中断
    if(str[0]==0x80){//判断接收的数据是否为0x80
      hal_gpio_togglepin(led0_gpio_port,led0_pin);//翻转pb5电平
    }
  }
}

printf重定向

int fputc(int c,file *stream){
  hal_uart_transmit(&huart1,(uint8_t *)&c,1,100);
  return c;
}

adc

hal_adc_start(阻塞式adc转换开始)

hal_statustypedef hal_adc_start(adc_handletypedef* hadc);
参数说明
*hadcadc选择,范围:&hadc1~&hadc3等

hal_adc_stop(阻塞式adc转换停止)

hal_statustypedef hal_adc_stop(adc_handletypedef* hadc);
参数说明
*hadcadc选择,范围:&hadc1~&hadc3等

hal_adc_start_it(非阻塞式adc转换开始)

hal_statustypedef hal_adc_start_it(adc_handletypedef* hadc);
参数说明
*hadcadc选择,范围:&hadc1~&hadc3等

hal_adc_stop_it(非阻塞式adc转换停止)

hal_statustypedef hal_adc_stop_it(adc_handletypedef* hadc);
参数说明
*hadcadc选择,范围:&hadc1~&hadc3等

hal_adc_pollforconversion(等待常规组转换完成)

hal_statustypedef hal_adc_pollforconversion(adc_handletypedef* hadc, uint32_t timeout)
参数说明
*hadcadc选择,范围:&hadc1~&hadc3等
timeout超时时间
返回值状态
hal_error:错误
hal_timeout:超时
hal_ok:转换完成

hal_adc_getvalue(获取adc转换结果)

uint32_t hal_adc_getvalue(adc_handletypedef* hadc);
参数说明
*hadcadc选择,范围:&hadc1~&hadc3等
返回值adc转换结果

adc单通道应用举例

//阻塞式
hal_adc_start(&hadc1);//开始adc转换
if(hal_ok==hal_adc_pollforconversion(&hadc1,10)){//判断是否转换成功
	adc_value=hal_adc_getvalue(&hadc1);//获取adc转换值
   	printf("当前采集值为:%d\r\n",adc_value);//串口输出值
}


//非阻塞式
hal_adc_start_it(&hadc1);//开始adc转换

//adc的中断回调函数
void hal_adc_convcpltcallback(adc_handletypedef* hadc){
  if(hadc->instance==adc1){//判断是否为adc1产生的中断
    adc_value=hal_adc_getvalue(&hadc1);//获取adc转换值
    printf("当前值:%d\r\n",adc_value);//串口输出值
  }
}
(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

利用 STM32 实现多协议物联网网关:Modbus/Zigbee 到以太网/Wi-Fi 的数据桥接

08-06

STLINK CONNECTION ERROR 问题的解决

08-06

STM32 OLED屏幕SSD1306显示浮点 负数

08-06

循迹小车基本原理和代码实现

08-06

GD32F303高级定时器输出互补PWM-开发笔记

08-06

J-Link:STM32使用J-LINK烧录程序,其他MCU也通用

08-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论