STM32系列之HAL库开发
STM32系列文章目录
文章目录
- STM32系列文章目录
- 前言
- 一、HAL库之串口收发
- 1.配置STM32CUBEID
- 2.使用串口中断收发
- 2.1 配置串口中断
- 2.2 HAL库中断处理逻辑
- 3 测试结果
前言
本文主要记录STM32—HAL库开发笔记,以及一些本人在开发过程中遇到的问题。
一、HAL库之串口收发
在本章节主要介绍USART的串口收发方式
1.配置STM32CUBEID
配置:USART的波特率为115200,其余参数默认
在自动生成的工程文件中,在工程文件夹下找到Core/Src下,找到usart.c文件。添加如下代码。
#ifdef __GNUC__/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printfset to 'Yes') calls __io_putchar() */#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/*** @brief Retargets the C library printf function to the USART.* @param None* @retval None*/
PUTCHAR_PROTOTYPE
{/* Place your implementation of fputc here *//* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);return ch;
}
提示:需要加在/* USER CODE BEGIN */和/* USER CODE END */之间,否则重新生成工程时候,代码会消失。
需要在使用串口打印数据的地方,直接调用printf函数即可。
2.使用串口中断收发
2.1 配置串口中断
使能串口中断,并设置抢占式优先级和子优先级。
2.2 HAL库中断处理逻辑
下面来逐步实现上述功能
- 调用HAL_UART_Receive_IT()来实现开启中断,设置接受缓存区,以及要接受的字节数量,需要在加在main函数中的,while之前
HAL_UART_Receive_IT(&huart1, &USART1_NewData, 1);//开启接收中断,设置缓冲区,以及设置多少个字节后进入中断
- 写中断回调函数HAL_UART_RxCpltCallback()函数
在HAL库中,可以找到HAL_UART_RxCpltCallback()的定义如下所示
/*** @brief Rx Transfer completed callbacks.* @param huart Pointer to a UART_HandleTypeDef structure that contains* the configuration information for the specified UART module.* @retval None*/
__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{/* Prevent unused argument(s) compilation warning */UNUSED(huart);/* NOTE: This function should not be modified, when the callback is needed,the HAL_UART_RxCpltCallback could be implemented in the user file*/
}
_weak是弱函数的意思,在MDK ARM链接时优先链接定义为非weak的函数或变量,如果找不到则再链接_weak函数。故此自定义HAL_UART_RxCpltCallback()函数如下。
uint8_t USART1_BUFF[USART_MAX_LEN];//接受缓冲区
uint16_t USART1_RX_STA=0;//接受状态标记
uint8_t USART1_NewData;//串口收到的1字节数据缓存void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart==&huart1){printf("%c",USART1_NewData);//HAL_UART_Transmit(&huart1,(uint8_t *)USART1_NewData,1,100);if((USART1_RX_STA&0x00)==0){if(USART1_RX_STA&0x4000){if(USART1_NewData!=0x0a){USART1_RX_STA=0;//重新开始接受}else{USART1_RX_STA|=0x8000;}}else{USART1_BUFF[USART1_RX_STA&0x3FFF]=USART1_NewData;USART1_RX_STA++;if(USART1_RX_STA>(USART_MAX_LEN-1)){USART1_RX_STA=0;}}}}HAL_UART_Receive_IT(&huart1, &USART1_NewData, 1);//由于是收到一个字节就进中断一次,在出中断回调函数之前需要重新打开串口接受中断。
}
按照上述配置之后,便可以使用printf打印信息,以及使用串口接收中断回显上位机发来的信息。
3 测试结果
STM32系列之HAL库开发相关推荐
- STM32单片机基于HAL库开发HC-SR04 超声波测距模块(终极版)
参考: 某宝HC-SR04 超声波测距模块商品详情页 STM32L051C8T6 HAL库 输入捕获进行超声波测距 案例 STM32CubeMX学习笔记3--TIM2输入捕获(SR-04测距) cub ...
- 【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项
目录 1.初识HAL库(了解) 1.1CMSIS简介 1.2HAL库简介 2.STM32Cube固件包浅析(了解) 2.1如何获取STM32Cube固件包? 2.2STM32Cube固件包文件夹简介 ...
- 配置CLion进行嵌入式STM32的HAL库开发
前言 时不可以苟遇,道不可以虚行. 一.准备 1.软件 CLion-2020:百度网盘提取链接放在文章最后. STM32CubeMX:使用 6.5.0 版本的,不要使用最新版本的 CubeMX,不然没 ...
- STM32+RS485+Modbus-RTU(主机模式+从机模式)-标准库/HAL库开发
modbus协议 完成modbus协议的编程之后,设备可以分别作为modbus协议的主机或者从机进行测试,使用模拟软件测试完毕后,完整代码以三个版本的形式进行介绍 1.版本一:使用串口接收数据超时完成 ...
- 清泉HAL库开发STM32之基础概念
文章目录 前言 一.STM32标准库和HAL库分别是什么? 二.HAL库开发 cubemx新建工程 1.选择 CPU 型号 2.确认时钟源 3. 配置 IO 口 4. 配置系统时钟 5. 进一步配置 ...
- STM32 HAL库开发学习笔记: USART1串口通讯(中断方式) IDE-STM32CubeIDE
STM32串口通讯有三种方式,分别为阻塞(轮询).中断.DMA.这里将用中断的方式开发. 笔者也是刚入门STM32 HAL库开发,该笔记致希望于能帮到初学者,文中配置步骤.代码.实验现象均是笔者实践可 ...
- STM32 HAL库开发转固件库开发杂谈
前言 本文使用代码工程 STM32HAL库开发转固件库开发杂谈-嵌入式文档类资源-CSDN文库 STM32 最早提供固件库开发,在当时也是一个很大的创新.导致大量攻城狮熟悉了固件库开发,后面STM32 ...
- STM32如何配置HAL库
STM32如何配置HAL库 前言 相比较早几年使用标准库开发来讲,最近几年HAL库的使用是越来越多,那么我们开发应当使用哪一种呢,本文着重介绍常用的几种开发方式及相互之间的区别,白猫也好.黑猫也好 ...
- C 语言使用 HAL 库开发
C 语言使用 HAL 库开发 ST公司先后推出了两套主要库:标准外设库(Standard Peripherals Library)和HAL库(Hardware Abstraction Layer).标 ...
最新文章
- 代码注入之远程线程篇
- 小程序文本溢出显示省略号(单行/多行)
- SpringBoot 自定义Banner
- Spring源码解析:自定义标签的解析过程
- Zabbix如何监控Windows机器
- MyBatis sql查询字段问题
- js实现轮播图常规类(原生JS,没有任何框架)
- 解决办法:java.lang.NoClassDefFoundError
- 进行单元测试时一直报这个错,原因是缺少aspectjweaver包
- matlab做gui界面抛体运动,用MATLAB进行抛体运动中的探讨模拟
- python实现——处理Excel表格(超详细)
- MATLAB画甘特图
- 牛排生熟程度 英语说法
- QQ网页登陆密码加密方式(农场、空间、WebQQ等通用)(网摘)
- java电话面试_记一次java电话面试
- 科大讯飞Windows麦克风监听语音唤醒+语音识别demo
- 由于和IBM合作“IBM软件人才联盟”的项目,在社区开一个“IBM人才论坛”
- 前端开发行业现状调查
- exchange 2013 SSO
- 计算机科学和统计学他俩差差,432统计学[专硕]考研复习资料2020年湖南师范大学数学与计算机科学学院...