网站首页 > 编程文章 正文
GPIO的典型HAL函数
初始化引脚工作模式
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);
CubeMX设置中已图形化配置,不动。
引脚复位
void HAL_GPIO_DeInit(GPIO_Ty peDef *GPIOx, uint32_t GPIO_Pin);
初始化之后的引脚恢复成默认的状态,即各个寄存器复位时的值。
读取电平
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
按键触发:一端通过电阻上拉到高电平,一端接地。STM32内部自带上拉电阻(MX中Input设为上拉)。持续扫描或外部中断。扫描需要延时去抖动。
翻转电平
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
输出信号
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
其中,GPIOx为目标引脚端口号,GPIO_Pin为目标引脚编号,PinState为电平状态。高电平——GPIO_PIN_SET,低电平——GPIO_PIN_RESET。(和CubeMX默认设置无关?)
E.G.
if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==GPIO_PIN_RESET)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
While(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)==GPIO_PIN_RESET)
}
宏定义
用定义缩写替代原命令
#define KEY2 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13)
中断系统
概念
中断、中断源、中断向量、优先级、服务函数
STM32中断通道、中断函数服务可能被多个中断源共用。在中断服务函数入口要设计判断机制。
每个中断都要指定抢占优先级和响应优先级。
每个中断源要给定中断号。内核提供嵌套向量中断控制器NVIC设备。
外部中断
外部中断EXTI是STM32芯片实时处理外部事件的一种机制,请求来自于GPIO引脚。
STM32有16个外部中断源EXTI0~EXTI15,对应7个中断向量。0-4专用,5-9共用,10-15共用。
EXTI0的连接引脚为PA0~PG0,以此类推。
触发条件:上升沿、下降沿、双边沿触发。不能配置为高/低电平触发。
传统外部中断程序设计:(1)GPIO初始化为输入端口;(2)配置引脚与中断线的映射关系;(3)设置引脚对应的中断触发条件;(4)配置NVIC,使能中断;(5)编写中断服务函数。
传统外部中断程序设计:(1)CubeMX中置顶引脚并配置中断初始化参数(GPIO_EXTI);(2)重写引脚对应的中断回调函数。/在stm32xx_it.c中找到EXTI_IRQHandler函数,右键寻源找到CallBack,继续右键寻源找到虚函数。拷贝到main中重写。
定时器
定时器资源
系统滴答定时器SysTick,看门狗WatchDog,实时时钟RTC,基本定时器,TIM6、TIM7,通用定时器TIM2-5,高级定时器TIM1、TIM8。其中,SysTick集成在M内核中,给RTOS提供时钟节拍做时间基准。通用定时器在基本定时器的基础上,实现输出比较、输入捕获、PWM生成、单脉冲模式输出等功能。
STM32通用定时器
可以对内部时钟或触发源以及外部时钟或触发源进行计数。本质为加法计数器。
定时时间=(可编程预分频器Prescaler+1)x(主计数器Counter Period+1)x1/定时器时钟频率
TIM的MX配置过程:(1)设置Clock时钟源,一般使用内部时钟源;(2)在参数设置中设置Prescaler和Counter Period参数,如Prescaler=31999,Counter=499,Mode=Up;(3)设置NVIC嵌套向量中断控制器,使能。
定时器溢出回调虚函数:__weak void HAL_TOM_PeropdElapsedCallBack()
需要判断定时器实例:if(htim->Instance == TIM2)
在main()函数中启动相应的定时器,虚函数为stm32c8xx_hal_tim.c中HAL_TIM_BASE_START。
实例名称在tim.c中,如htim2、htim3。
串口收发
CubeMX配置
串口发送
阻塞式发送函数:HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, unint16_t Size, uint32_t Timeout);推荐
非阻塞式发送函数:HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, unint16_t Size);
发送完毕中断回调函数:void HAL_UART_TxCpltCallBack(UART_Handle TypeDef *huart);
发送一半中断回调函数:void HAL_UART_TxHalfCallBack(UART_Handle TypeDef *huart);
非阻塞发送EG
uint8_t Tx_str1[] = 'Hello World!\r\n';
HAL_UART_Transmit_IT(&huart1, Tx_str1, sizeof(Tx_str1));
void HAL_UART_TxCpltCallBack(UART_Handle TypeDef *huart)
{
if(huart->Instance == USART1)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_13);
}
}
阻塞发送EG
HAL_UART_Transmit(&huart1, dat_Txd, 5,10000);
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_13);
串口接收
阻塞式接收函数:HAL_StatusTypeDef HAL_UART_Recieve(UART_HandleTypeDef *huart, uint8_t *pData, unint16_t Size, uint32_t Timeout);
非阻塞式接收函数:HAL_StatusTypeDef HAL_UART_Recieve_IT(UART_HandleTypeDef *huart, uint8_t *pData, unint16_t Size); 推荐
接收完毕中断回调函数:void HAL_UART_RxCpltCallBack(UART_Handle TypeDef *huart);
接收一半中断回调函数:void HAL_UART_RxHalfCallBack(UART_Handle TypeDef *huart);
非阻塞接收EG
uint8_t dat_Rxd = 0;
HAL_UART_Recieve_IT(&huart1, dat_Rxd, 1);
void HAL_UART_RxCpltCallBack(UART_Handle TypeDef *huart)
{
if(huart->Instance == USART1)
{
if(dat_Rxd == 0x5A)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_13);
}
}
}
sprinf函数
#include "stdio.h"
uint8_t Str_buff[64];
sprintf((char*)Str_buff,"温度为:%d摄氏度",tmp);
猜你喜欢
- 2024-09-11 STM32使用keil编译时出现结构体未定义错误原因
- 2024-09-11 STM32按键中断应用实例(stm32多个按键中断)
- 2024-09-11 如何安装KEIL5,从零起步学习单片机STM32系列
- 2024-09-11 用keil5进行STM32项目开发时,那些让人摸不着头脑的程序
- 2024-09-11 如何使用keil 5 编写 51单片机 工程
- 2024-09-11 工程师实战:基于STM32 MCU的数字函数发生器
- 2024-09-11 如何使用STM32的片上调试接口进行软件调试和性能优化
- 2024-09-11 STM32 CubeMX生成的代码调试与优化技巧
- 2024-09-11 原来STM32单片机的开发如此的简单
- 2024-09-11 STM32硬件错误HardFault_Handler的处理方法
你 发表评论:
欢迎- 最近发表
-
- 数据不丢失 从Windows 11的DEV版降级到正式版
- Win11学院:在Windows11 25905预览版中如何启用Dev Drive
- DEVC++的卸载(devcon卸载驱动)
- win11 dev 开发版 升级攻略完整版
- 最新Windows11+Windows10系统各种版本永久激活密钥以及下载链接
- 想学Python,却还记不住语法?神仙书籍 python背记手册双手奉上
- 如何用Python语言开发大型服务器程序
- 30天Python 入门到精通(python零基础入门到精通)
- 入门扫盲:9本自学Python PDF书籍,让你避免踩坑,轻松变大神!
- 学好Python需要看的4本书推荐(学python好用的书)
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)