欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 常用HAL库

常用HAL库

2025/2/12 7:16:18 来源:https://blog.csdn.net/X_Radishi/article/details/145569333  浏览:    关键词:常用HAL库

宏定义

#define LED1_PIN  GPIO_PIN_12    //定义引脚别名
#define LED1_GPIO_PORT  GPIOB    // GPIO_PIN_12 + GPIOB确定指定引脚
#define LED1_GPIO_CLK_ENABLE()   __HAL_RCC_GPIOA_CLK_ENABLE()  //定义方法别名
#define LED1(a) HAL_GPIO_WritePin(LED1_GPIO_PORT,LED1_PIN,a)  //带参宏

常用方法

SystemClock_Config();  //系统时钟初始化 在所有操作之前
HAL_Delay(1000)       //延迟函数GPIO口初始化:
void GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStructure;/*开启GPIO口的时钟*/__HAL_RCC_GPIOA_CLK_ENABLE()/*选择引脚*/GPIO_InitStructure.Pin = GPIO_PIN;/*设置引脚为输入模式或输出模式*/GPIO_InitStructure.Mode = GPIO_MODE_INPUT;/*设置引脚不上拉也不下拉*/GPIO_InitStructure.Pull = GPIO_NOPULL;/*使用上面的结构体初始化*/HAL_GPIO_Init(GPIO_PORT, &GPIO_InitStructure);}
__HAL_RCC_GPIOA_CLK_ENABLE()    //GPIO A组 时钟使能,使能后GPIO口才能使用
HAL_GPIO_WritePin(LED1_GPIO_PORT,LED1_PIN,state)  //设置GPIO高低电平,state=0或1
HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)  //读取GPIO电平
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_12)  //反转GPIO电平
按键检测:
uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin){/*检测是否有按键按下 */if (HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == KEY_ON ) {/*等待按键释放 */while (HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == KEY_ON);return  KEY_ON;} elsereturn KEY_OFF;}串口:
/* UART 重定向 printf函数 */
#include "stdio.h"
#ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{HAL_UART_Transmit(&UartHandle, (uint8_t *)&ch, 1, 0xFFFF);  //阻塞方式打印,串口return ch;
}/* UART handler declaration */
UART_HandleTypeDef UartHandle;
UartHandle.Instance        = USARTx;  //USART1句柄
UartHandle.Init.BaudRate   = 9600;   //波特率
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;  //8位字长
UartHandle.Init.StopBits   = UART_STOPBITS_1;  //一个停止位
UartHandle.Init.Parity     = UART_PARITY_ODD;  //奇偶校验
UartHandle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;  //无硬件流控
UartHandle.Init.Mode       = UART_MODE_TX_RX;  //收发模式
if (HAL_UART_Init(&UartHandle) != HAL_OK)
{/* Initialization Error */Error_Handler();
}
// __HAL_UART_ENABLE_IT(&UartHandle,UART_IT_RXNE);   //串口未使能时需要手动使能
printf("hell world\n");/*****************不使用printf,手动发送字符串 **********************/void Usart_SendString(uint8_t *str){unsigned int k=0;do {HAL_UART_Transmit( &UartHandle,(uint8_t *)(str + k) ,1,1000);k++;} while (*(str + k)!='\0');}定时器:
定时时间 = (Prescaler + 1) × (Period + 1) ÷ 时钟频率    //定时时间单位:秒  时钟频率:Hz   1MHz=1000000Hz
编写中断回调函数
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim)
{if(htim == &htim7) // 判断触发溢出中断的定时器{//usercode}
}
__HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);  // 清除定时器初始化过程中的更新中断标志,避免定时器一启动就中断
HAL_TIM_Base_Start_IT(&htim3)    //启动定时器3,定时器会开始计数,计数溢出时会产生UEV事件,并触发中断。
HAL_TIM_Base_Stop_IT(&htim3)   //停止中断工作方式的定时器
HAL_TIM_Base_GetState(&htim3)   //获取基础定时器的当前状态
__HAL_TIM_SET_AUTORELOAD(&htim3,1000)   //动态修改Period

防止头文件重复导入

 #ifndef __LED_H#define __LED_H/*此处省略头文件的具体内容*/#endif /* end of __LED_H */

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com