STM32 串口学习(二)

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

在这里插入图片描述

软件设计

void uart_init(u32 baud)
{//UART 初始化设置UART1_Handler.Instance=USART1; //USART1UART1_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; //PA9GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出GPIO_Initure.Pull=GPIO_PULLUP; //上拉GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //高速HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化 PA9GPIO_Initure.Pin=GPIO_PIN_10; //PA10GPIO_Initure.Mode=GPIO_MODE_AF_INPUT;//模式要设置为复用输入模式!HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化 PA10
#if EN_USART1_RXHAL_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 进行处理。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue中data没有写return报Cannot read property ‘__ob__‘ of undefined错误

最近需到一个在开发中很常见错误,原因是自己开发时没仔细检查代码,删除数据时把data中return一并删除了,导致路由跳转点击无反应。data函数在Vue中是一个特殊的方法,用于定义组件的本地状态。经翻阅相关文档,了解到它必…

golang 字符串操作、处理

一、golang的字符串长度 1. len()内置系统函数,计算字符串结果是字符串的字节长度,不是字符长度 //1.ASCII字符串长度(字节长度) str1 : "wo ai zhong guo" fmt.Println(len(str1)) //15//2.带中文的字符串长度&…

CAN通信的位定时与同步

位定时与同步 1.位时间 1.1相关基本概念 1)系统时钟:记为 t c l k t_{clk} tclk​; 2)CAN时钟周期:CAN时钟是由系统时钟分频而来的一个时间长度值,表示CAN控制器的工作时钟,实际上就是一个时…

网络编程套接字

网络编程套接字 预备知识理解源IP地址和目的IP地址认识端口号理解 "端口号" 和 "进程ID"理解源端口号和目的端口号认识TCP协议认识UDP协议网络字节序 socket编程接口socket 常见APIsockaddr结构 简单的UDP网络程序UDP通用服务端udp服务端初始化udp服务端启…

基于Innobackupex的MySQL备份脚本

基本要求: 1,周日全备 2,周一至周六增量备份 3,备份使用backup用户 grant SELECT,RELOAD,SHOW DATABASES,LOCK TABLES,SUPER,REPLICATION CLIENT on *.* to backuplocalhost identified by 123456; 4,结合计划…

自动化运维工具——Ansible

自动化运维工具——Ansible 一、Ansible概述二、ansible 环境安装部署1.管理端安装 ansible2.ansible 目录结构3.配置主机清单4.配置密钥对验证 三、ansible 命令行模块1.command 模块2.shell 模块3.cron 模块4.user 模块5.group 模块6.copy 模块7.file 模块8.hostname 模块9&a…

Electron 主进程和渲染进程传值及窗口间传值

1 渲染进程调用主进程得方法 下面是渲染进程得代码: let { ipcRenderer} require( electron ); ipcRenderer.send( xxx ); //渲染进程中调用 下面是主进程得代码: var { ipcMain } require( electron ); ipcMain.on("xxx",function () { } ) 2 渲染进程与…

自定义一个仿拼多多地址选择器

前言 做了一个仿拼多多的地址选择器,但是与拼多多实现方法有些出入,大体效果是差不多的。废话不多说,先上一张效果动图: 开始 先说说本文的一些概念。地区级别:就是比如省级,市级,县级&#x…

map,set的封装(基于改造红黑树)

目录 引言 1.迭代器 2.map的[]重载 3.KeyOfValue模板参数 4.整体代码展示 //改造后的红黑树代码 #include <iostream> using namespace std;enum Colour {RED 0,BLACK, };//为了实现map与set封装使用同一个模板红黑树&#xff0c;前者的value是pair&#xff0c;后者…

禁着点的方案数--科大讯飞笔试

小红拿到了一个数组&#xff0c; 她将这个数组的元素定义为“禁着点”。小红希望你找到一对正整数x和y&#xff0c;满足xys且x和y都不是“禁着点’。你能告诉小红有多少种方案吗? 输入描述 第一行输入一个正整数n&#xff0c;代表禁着点的数量。 第二行输入n个正整数ai&…

WebAgent-基于大型语言模型的代理程序

大型语言模型&#xff08;LLM&#xff09;可以解决多种自然语言任务&#xff0c;例如算术、常识、逻辑推理、问答、文本生成、交互式决策任务。最近&#xff0c;LLM在自主网络导航方面也取得了巨大成功&#xff0c;代理程序助HTML理解和多步推理的能力&#xff0c;通过控制计算…

Flutter中Navigator 跳转传参数和反向传参数

初始化路由 MaterialApp(routes: <String, WidgetBuilder>{"/Second": (BuildContext context){return Second("");}}, 跳转传参数 String va await Navigator.of(context).push(MaterialPageRoute(builder: (content) {return Second( demo); },…

支付宝当面付自行实现签名及整个流程(php)

一直不太喜欢用官方的sdk。因为如果有更新&#xff0c;还要重新下载sdk&#xff0c;还要修改一些东西。感觉挺不方便的。所以我一般都是调用api生撸。但是支付宝的文档真的很生涩&#xff0c;调试半天终于弄好了。记录一下吧。 直接上代码&#xff1a; $time time();try{$or…

#P0998. [NOIP2007普及组] 守望者的逃离

题目背景 恶魔猎手尤迪安野心勃勃&#xff0c;他背叛了暗夜精灵&#xff0c;率领深藏在海底的娜迦族企图叛变。 题目描述 守望者在与尤迪安的交锋中遭遇了围杀&#xff0c;被困在一个荒芜的大岛上。 为了杀死守望者&#xff0c;尤迪安开始对这个荒岛施咒&#xff0c;这座岛…

Spring——更快捷的存储 / 获取Bean对象

文章目录 前言一、存储 Bean 对象类注解为什么有五个类注解使用类注解存储对象配置扫描路径(重中之重)添加注解存储 Bean 对象 方法注解配置扫描路径(重中之重)使用方法注解存储对象 二、获取 Bean 对象Autowired属性注入Setter注入构造方法注入 Resource 总结 前言 本人是一个…

【雕爷学编程】MicroPython动手做(20)——掌控板之三轴加速度6

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

JQuery操作单选按钮Radio和复选框checkbox

获取选中值&#xff1a; $(input:radio:checked).val()&#xff1b;$("input[typeradio]:checked").val();$("input[namerd]:checked").val();$("input[idrand_question]:checked").val();设置第一个Radio为选中值&#xff1a; $(input:radio:…

Gossip - hashicorp/memberlist 介绍(一):基本定义

hashicorp/memberlist Github 地址:hashicorp/memberlist 是 Gossip 协议的一个 Golang 语言实现版本 本系列介绍 hashicorp/memberlist 相关实现 先从一些基本定义开始 协议 // messageType is an integer ID of a type of message that can be received // on network…

DNS缓存病毒防护43.227.220

DNS缓存病毒又称DNS欺骗&#xff0c;是一种通过查找并利用DNS系统中存在的漏洞&#xff0c;将流量从合法服务器引导至虚假服务器上的攻击方式。 在实际的DNS解析过程中&#xff0c;用户请求某个网站&#xff0c;浏览器首先会查找本机中的DNS缓存&#xff0c;如果DNS缓存中记录…

htmlCSS-----定位

目录 前言 定位 分类和取值 定位的取值 1.相对定位 2.绝对位置 元素居中操作 3.固定定位 前言 今天我们来学习html&CSS中的元素的定位&#xff0c;通过元素的定位我们可以去更好的将盒子放到我们想要的位置&#xff0c;下面就一起来看看吧&#xff01; 定位 定位posi…