STM32 串口学习(二)

要用跳线帽将PA9与RXD相连,PA10与TXD相连。

在这里插入图片描述

软件设计

void uart_init(u32 baud)
{
	//UART 初始化设置
	UART1_Handler.Instance=USART1; //USART1
	UART1_Handler.Init.BaudRate=bound; //波特率
	UART1_Handler.Init.WordLength=UART_WORDLENGTH_8B; //字长为 8 位数据格式
	UART1_Handler.Init.StopBits=UART_STOPBITS_1; //一个停止位
	UART1_Handler.Init.Parity=UART_PARITY_NONE; //无奇偶校验位
	UART1_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE; //无硬件流控
	UART1_Handler.Init.Mode=UART_MODE_TX_RX; //收发模式
	HAL_UART_Init(&UART1_Handler);
	HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);
}


定义了HAL_UART_MspInit();

//GPIO 端口设置
GPIO_InitTypeDef GPIO_Initure;
if(huart->Instance==USART1) //如果是串口 1,进行串口 1 MSP 初始化
{
	__HAL_RCC_GPIOA_CLK_ENABLE(); //使能 GPIOA 时钟
	__HAL_RCC_USART1_CLK_ENABLE(); //使能 USART1 时钟
	__HAL_RCC_AFIO_CLK_ENABLE();
	GPIO_Initure.Pin=GPIO_PIN_9; //PA9
	GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出
	GPIO_Initure.Pull=GPIO_PULLUP; //上拉
	GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //高速
	HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化 PA9
	GPIO_Initure.Pin=GPIO_PIN_10; //PA10
	GPIO_Initure.Mode=GPIO_MODE_AF_INPUT;//模式要设置为复用输入模式!
	HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化 PA10
#if EN_USART1_RX
	HAL_NVIC_EnableIRQ(USART1_IRQn);
	HAL_NVIC_SetPrioority(USART1_IRQn,3,3);//抢占优先级3,子优先级3
#endif

编写中断服务函数

void USART1_IRQHandler(void)
{
	HAL_UART_IRQHandler(&UART1_Handler);
}
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
{
	 uint32_t isrflags = READ_REG(huart->Instance->SR);
	 uint32_t cr1its = READ_REG(huart->Instance->CR1);
	 uint32_t cr3its = READ_REG(huart->Instance->CR3);
	 uint32_t errorflags = 0x00U;
	 uint32_t dmarequest = 0x00U;
	 errorflags = (isrflags & (uint32_t)(USART_SR_PE | USART_SR_FE | 
	USART_SR_ORE | USART_SR_NE));
	 if (errorflags == RESET)
	 {
	 if (((isrflags & USART_SR_RXNE) != RESET) && 
	((cr1its & USART_CR1_RXNEIE) != RESET))
	 {
	 UART_Receive_IT(huart);
	 return;
	 }
	 }//此处省略部分代码
}

在函数HAL_UART_IRQHandler内部通过判断中断类型是否为接收完成中断,确定是否调用HAL另外一个函数UART_Receive_IT()。
函数 UART_Receive_IT()的作用是把每次中断接收到的字符保存在串口句柄的缓存指针 pRxBuffPtr 中,同时每次接收一个字符,其计数器 RxXferCount 减 1,直到接收完成 RxXferSize 个字符之后 RxXferCount 设置为0,同时调用接收完成回调函数 HAL_UART_RxCpltCallback 进行处理。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/56644.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java+springboot+mysql疫情物资管理系统

项目介绍: 使用javaspringbootmysql开发的疫情物资管理系统,系统包含超级管理员,系统管理员、员工角色,功能如下: 超级管理员:管理员管理;部门管理;职位管理;员工管理&…

Redis哨兵模式

Redis哨兵模式 一、服务器准备二、安装redis1.Master服务器2.SlaveFirst服务器3.SlaveSecond服务器 三、依次开启Redis服务器四、开启哨兵1.修改Master哨兵配置文件2.修改SlaveFirst哨兵配置文件3.修改SlaveSecond哨兵配置文件4.开启哨兵5.验证是否开启成功6.主从配置如下五、挂…

线程池-手写线程池Linux C简单版本(生产者-消费者模型)

目录 简介手写线程池线程池结构体分析task_ttask_queue_tthread_pool_t 线程池函数分析thread_pool_createthread_pool_postthread_workerthread_pool_destroywait_all_donethread_pool_free 主函数调用 运行结果 简介 本线程池采用C语言实现 线程池的场景: 当某些…

React哲学——官方示例

在本篇技术博客中,我们将介绍React官方示例:React哲学。我们将深入探讨这个示例中使用的组件化、状态管理和数据流等核心概念。让我们一起开始吧! 项目概览 React是一个流行的JavaScript库,用于构建用户界面。React的设计理念是…

组合模式(Composite)

组合模式是一种结构型设计模式,主要用来将多个对象组织成树形结构以表示“部分-整体”的层次结构,因此该模式也称为“部分-整体”模式。简言之,组合模式就是用来将一组对象组合成树状结构,并且能像使用独立对象一样使用它们。 Co…

排序进行曲-v2.0

小程一言 这篇文章是在排序进行曲1.0之后的续讲, 0之后的续讲,英语在上一篇讲的排序的基本概念与分类0之后的续讲, 英语在上一篇讲的排序的基本概念与分类这片主要是对0之后的续讲,英语在上一篇讲的排序的基本概念与分类这 篇主要是对几个简单的排序进行细致的分析…

HarmonyOS/OpenHarmony元服务开发-配置卡片的配置文件

卡片相关的配置文件主要包含FormExtensionAbility的配置和卡片的配置两部分: 1.卡片需要在module.json5配置文件中的extensionAbilities标签下,配置FormExtensionAbility相关信息。FormExtensionAbility需要填写metadata元信息标签,其中键名称…

企业电子招投标采购系统java spring cloud+spring boot功能模块功能描述+数字化采购管理 采购招投标

​功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为外…

Java枚举解析:掌握枚举的绝佳指南!

申明:本人于公众号Java筑基期,CSDN先后发当前文章,标明原创,转载二次发文请注明转载公众号,另外请不要再标原创 ,注意违规 枚举 在Java中,枚举(Enumeration)是一种特殊的…

Python实现单例模式

一、介绍 单例模式是一种常见的设计模式,它保证一个类只能被实例化一次,并提供了一个全局访问点来获取这个唯一的实例。在Python中,可以通过使用装饰器、元类或模块等方式实现单例模式。 二、Python实现单例模式的6种方法 1、使用模块实现…

git 忽略掉不需要的文件

第一步:创建.gitignore文件 touch .gitignore 第二步:使用vi编辑器 输入不需要的文件,或用通配符*来忽视一系列文件 效果:

什么是软件检测证明材料,如何才能获得软件检测证明材料?

一、什么是软件检测证明材料 软件检测证明材料是指在软件开发和发布过程中,为了证明软件的质量和合法性,进行的一系列检测和测试的结果的集合。它是软件开发者和用户之间信任的桥梁,可以帮助用户了解软件的性能和安全性,让用户放…

开放自动化软件的硬件平台

自动化行业的产品主要以嵌入式系统为主,历来对产品硬件的可靠性和性能都提出很高的要求。最典型的产品要数PLC。PLC 要求满足体积小,实时性,可靠性,可扩展性强,环境要求高等特点。它们通常采用工业级高性能嵌入式SoC 实…

LinearAlgebraMIT_6_ColumnSpaceAndNullSpace

这节课的两个重点是column space列空间和null space零空间。 x.1 pre-multiply/left multiply and post-multiply/right multiply 对于pre-multiply/left multiply左乘和post-multiply/right multiply右乘,如果用英文的pre-和post-是比较容易理解的, A…

Maven发布项目到Nexus私服

项目pom配置 在项目pom.xml中文件中的仓库配置&#xff0c;Nexus私服如何搭建在这里不介绍了可自行百度。 <distributionManagement><repository><id>releases</id><name>Nexus Release Repository</name><url>http://私服地址:34…

gitlab CI/CD 安装 gitlab runner

一、为什么需要安装gitlab runner &#xff1f; 极狐GitLab Runner 极狐GitLab Runner 是在流水线中运行作业的应用&#xff0c;与极狐GitLab CI/CD 配合运作。 说白了就是你部署的一个agent。 二、如何安装&#xff1f; 1.介绍通过helm部署github runner 2.helm添加仓库 h…

python小游戏课程设计报告,python游戏课程设计报告

大家好&#xff0c;给大家分享一下python2048游戏课程设计报告&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01;

Clion开发Stm32之温湿度传感器(DS18B20)驱动编写和测试

前言 涵盖之前文章: Clion开发STM32之HAL库GPIO宏定义封装(最新版)Clion开发stm32之微妙延迟(采用nop指令实现)Clion开发STM32之日志模块(参考RT-Thread) DSP18B20驱动文件 头文件 /*******************************************************************************Copy…

多线程(JavaEE初阶系列6)

目录 前言&#xff1a; 1.什么是线程池 2.标准库中的线程池 3.实现线程池 结束语&#xff1a; 前言&#xff1a; 在上一节中小编带着大家了解了一下Java标准库中的定时器的使用方式并给大家实现了一下&#xff0c;那么这节中小编将分享一下多线程中的线程池。给大家讲解一…

CNN卷积详解

转载自&#xff1a;https://blog.csdn.net/yilulvxing/article/details/107452153 仅用于自己学习过程中经典文章讲解的记录&#xff0c;防止原文失效。 1&#xff1a;单通道卷积 以单通道卷积为例&#xff0c;输入为&#xff08;1,5,5&#xff09;&#xff0c;分别表示1个通道…