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库中断处理逻辑


下面来逐步实现上述功能

  1. 调用HAL_UART_Receive_IT()来实现开启中断,设置接受缓存区,以及要接受的字节数量,需要在加在main函数中的,while之前
HAL_UART_Receive_IT(&huart1, &USART1_NewData, 1);//开启接收中断,设置缓冲区,以及设置多少个字节后进入中断
  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库开发相关推荐

  1. STM32单片机基于HAL库开发HC-SR04 超声波测距模块(终极版)

    参考: 某宝HC-SR04 超声波测距模块商品详情页 STM32L051C8T6 HAL库 输入捕获进行超声波测距 案例 STM32CubeMX学习笔记3--TIM2输入捕获(SR-04测距) cub ...

  2. 【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项

    目录 1.初识HAL库(了解) 1.1CMSIS简介 1.2HAL库简介 2.STM32Cube固件包浅析(了解) 2.1如何获取STM32Cube固件包? 2.2STM32Cube固件包文件夹简介 ...

  3. 配置CLion进行嵌入式STM32的HAL库开发

    前言 时不可以苟遇,道不可以虚行. 一.准备 1.软件 CLion-2020:百度网盘提取链接放在文章最后. STM32CubeMX:使用 6.5.0 版本的,不要使用最新版本的 CubeMX,不然没 ...

  4. STM32+RS485+Modbus-RTU(主机模式+从机模式)-标准库/HAL库开发

    modbus协议 完成modbus协议的编程之后,设备可以分别作为modbus协议的主机或者从机进行测试,使用模拟软件测试完毕后,完整代码以三个版本的形式进行介绍 1.版本一:使用串口接收数据超时完成 ...

  5. 清泉HAL库开发STM32之基础概念

    文章目录 前言 一.STM32标准库和HAL库分别是什么? 二.HAL库开发 cubemx新建工程 1.选择 CPU 型号 2.确认时钟源 3. 配置 IO 口 4. 配置系统时钟 5. 进一步配置 ...

  6. STM32 HAL库开发学习笔记: USART1串口通讯(中断方式) IDE-STM32CubeIDE

    STM32串口通讯有三种方式,分别为阻塞(轮询).中断.DMA.这里将用中断的方式开发. 笔者也是刚入门STM32 HAL库开发,该笔记致希望于能帮到初学者,文中配置步骤.代码.实验现象均是笔者实践可 ...

  7. STM32 HAL库开发转固件库开发杂谈

    前言 本文使用代码工程 STM32HAL库开发转固件库开发杂谈-嵌入式文档类资源-CSDN文库 STM32 最早提供固件库开发,在当时也是一个很大的创新.导致大量攻城狮熟悉了固件库开发,后面STM32 ...

  8. STM32如何配置HAL库

    STM32如何配置HAL库 前言   相比较早几年使用标准库开发来讲,最近几年HAL库的使用是越来越多,那么我们开发应当使用哪一种呢,本文着重介绍常用的几种开发方式及相互之间的区别,白猫也好.黑猫也好 ...

  9. C 语言使用 HAL 库开发

    C 语言使用 HAL 库开发 ST公司先后推出了两套主要库:标准外设库(Standard Peripherals Library)和HAL库(Hardware Abstraction Layer).标 ...

最新文章

  1. 代码注入之远程线程篇
  2. 小程序文本溢出显示省略号(单行/多行)
  3. SpringBoot 自定义Banner
  4. Spring源码解析:自定义标签的解析过程
  5. Zabbix如何监控Windows机器
  6. MyBatis sql查询字段问题
  7. js实现轮播图常规类(原生JS,没有任何框架)
  8. 解决办法:java.lang.NoClassDefFoundError
  9. 进行单元测试时一直报这个错,原因是缺少aspectjweaver包
  10. matlab做gui界面抛体运动,用MATLAB进行抛体运动中的探讨模拟
  11. python实现——处理Excel表格(超详细)
  12. MATLAB画甘特图
  13. 牛排生熟程度 英语说法
  14. QQ网页登陆密码加密方式(农场、空间、WebQQ等通用)(网摘)
  15. java电话面试_记一次java电话面试
  16. 科大讯飞Windows麦克风监听语音唤醒+语音识别demo
  17. 由于和IBM合作“IBM软件人才联盟”的项目,在社区开一个“IBM人才论坛”
  18. 前端开发行业现状调查
  19. exchange 2013 SSO
  20. 计算机科学和统计学他俩差差,432统计学[专硕]考研复习资料2020年湖南师范大学数学与计算机科学学院...

热门文章

  1. DNS劫持与路由器DNS劫持漏洞详解(附防护方法)
  2. HTM5新手学习的一些日常总结,相互交流和相互学习。
  3. 介绍自己过去现在和未来_过去,现在和未来
  4. linux命令一键卸载nginx,linux服务器nginx的卸载和安装
  5. 香港4月1日5G商用,月费198港元起
  6. 家用双wan口路由器推荐_请推荐双WAN口的有线千兆硬路由器?
  7. 【图像处理matlab】PCA+KNN人脸识别 ORL人脸数据集
  8. 儿童在未来游戏中的监管与保护趋势
  9. 成为一名专业Web渗透工程师难吗?
  10. javaMailSender 发送邮件设置昵称