使用USART2收发数据时,接收数据正常,但数据发不出去

今天使用串口2与上位机通信,发现问题:

单片机接收上位机的数据正常,但发送数据给上位机时,却总是失败。

为了排除程序的干扰,我构造了一个数组,循环发送这串数据:

void UartSend(uint8_t *pString,uint16_t DataLength)
{uint8_t i = 0;for(i = 0;i < DataLength; i++){USART2->DR = pString[i];while((USART2->SR&0x40)==0);}	
}uint8_t test[] = {1,2,3,4,5,6};
UartSend(test, 6);

结果还是失败,串口没有收到任何东西。

老板检查了硬件,和USART2-TX相关的引脚电路也都正常。看来还是软件配置的问题。

再回到USART的初始化看看:

void USART2_Configuration(uint32_t baud)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//USART2_TX   PA2GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);//USART2_RX	  PA3GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);//USART 初始化设置USART_InitStructure.USART_BaudRate = baud;//串口波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式USART_Init(USART2, &USART_InitStructure); 	//初始化串口2USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接受中断USART_Cmd(USART2, ENABLE);                    //使能串口2
}

好像没啥问题,老板说不对呀,你怎么没开启AFIO。我回答:看了芯片手册,PA2这个引脚不需要开启复用功能吧。。。

按老板的说法试了试,开启了APB2的AFIO功能,然后把PA2的工作模式配置为GPIO_Mode_AF_PP。果然,串口发送数据正常了。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //USART2_TX   PA2GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);

问题来了

我之前一直以为pin description中Default这一栏的功能表示这个引脚的默认功能。看来是我搞错了。

在这里插入图片描述

这就引出了两个问题:

1,难道芯片手册中的“Default”指的是复用,而不是默认吗?

2,是不是只要用到“Default”中的功能,都要开启AFIO时钟。

解答

1,“Default”指的是默认,但对于STM32的某些引脚来说,默认状态可能是普通的GPIO,而对于某些特定的功能(比如USART),需要通过AFIO复用功能来激活。

2,不是所有在 “Default” 中列出的功能都需要开启AFIO时钟。只有当你想要使用这个引脚的非默认功能时,比如说想把一个普通的GPIO引脚用作USART的TX或RX引脚,才需要开启AFIO时钟。

回到这次的bug,显然PA2的默认状态是普通的IO口,使用USART2_TX需要开启AFIO,并设置为GPIO_Mode_AF_PP才行。

未完待续…

实际上依然不是很清楚,比如:究竟怎么判断要不要开启AFIO?

快下班了,下次再补充上吧。

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

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

相关文章

微服务学习day02 -- nacos配置管理 -- Feign远程调用 -- Gateway服务网关

0.学习目标 1.Nacos配置管理 Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理…

网络安全之URL过滤

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; URL过滤是一种针对用户的URL请求进行上网控制的技术&#xff0c;通过允许或禁止用户访问某些网页资源&#xff0c;达到规范上网行为和降低安全风险…

bash: sqlplus: command not found 问题解决方法

一、问题描述 在Linux中Oracle安装成功后&#xff0c;首次启动使用时&#xff0c;出现 sqlplus 命令不识别的问题&#xff0c;现象如下&#xff1a; $ sqlplus / as sysdba bash: sqlplus: command not found...二、问题分析 查看环境变量是否正确配置&#xff1a; $ vim .ba…

elasticsearch篇:DSL查询语法

1.DSL查询文档 众所周知&#xff0c;elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1. DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出…

人工智能入门学习笔记2:人工智能学习资料

一、跟IT大佬学人工智能学习书籍 1、《5000天后的世界》AI扩展&#xff0c;人类无限的可能性 作者&#xff1a;凯文凯利 2、《智能革命》迎接人工智能时代的社会、经济与文化变革 作者&#xff1a;李彦宏 3、《人工智能》AI如何重塑个人、商业与社会的未来图谱 作者&#xf…

Sublime Text简介、下载、安装、汉化、常用插件和激活——《跟老吕学Python编程》附录资料

Sublime Text简介、下载、安装、汉化、常用插件和激活——《跟老吕学Python编程》附录资料 Sublime Text 简介Sublime Text 下载、安装、汉化、常用插件和激活Sublime Text 官网Sublime Text 下载Sublime Text 安装1.安装2.右键菜单3.启动安装4.耐心等待5.安装完成 Sublime Tex…

计算机网络 谢希仁(001-2)

计算机网络-方老师 总时长 24:45:00 共50个视频&#xff0c;6个模块 此文章包含1.5到1.7的内容 1.5计算机网络类别 连通 共享 分类方法 广域网是边缘部分和核心部分的核心部分 以前是拨号连接 现在是光纤 总线型 星型 环形网 1.6计算机网络的性能 带上单位之后就不是…

蓝桥杯历年真题省赛java b组2016年第七届

一、题目 取球博弈 两个人玩取球的游戏。 一共有N个球&#xff0c;每人轮流取球&#xff0c;每次可取集合{n1,n2,n3}中的任何一个数目。 如果无法继续取球&#xff0c;则游戏结束。 此时&#xff0c;持有奇数个球的一方获胜。 如果两人都是奇数&#xff0c;则为平局。 假设双…

专业款希亦、小米、必胜、云鲸洗地机怎么样?深度测评利弊

洗地机可以说是一种非常实用的清洁工具&#xff0c;尤其是对于那些需要经常给家里地板清洁的人来说。它能够高效、彻底清洁地板&#xff0c;去除顽固污渍、灰尘和细菌&#xff0c;让家居环境更加洁净卫生。可是面对型号繁多的洗地机&#xff0c;我们应该怎么挑选呢&#xff1f;…

PTA题解 --- N个数求和(C语言)

今天是PTA题库解法讲解的第二天&#xff0c;今天我们要讲解N个数求和&#xff0c;题目如下&#xff1a; 要解决这个问题&#xff0c;我们可以用C语言编写一个程序来处理和简化分数。程序的基本思路如下&#xff1a; 1. 定义一个函数来计算两个数的最大公约数&#xff08;GCD&a…

sqllab第二十三关通关笔记

知识点&#xff1a; mysqli_query() 返回值为资源型或布尔型如果内容为查询语句则返回资源型数据&#xff1b;如果内容为插入、更新、删除等语句则返回布尔类型结果mysql_fetch_array() 从结果集中取出一行作为关联数组或数字数组输入内容为指定查询的结果集单引号闭合绕过联…

分享5款占用系统资源少的软件

​ 在日常使用电脑时&#xff0c;我们需要各种软件来完成任务。以下是几款小巧但功能齐全的软件推荐。 1. 虚拟机软件——VirtualBox ​ VirtualBox是一款开源的虚拟机软件&#xff0c;允许用户在单一物理计算机上创建和运行多个虚拟操作系统。它支持多种操作系统&#xff0c…

【DFS算法】排列数字——acwing 842

问题描述 给定一个整数 n&#xff0c;将数字 1∼n 排成一排&#xff0c;将会有很多种排列方法。 现在&#xff0c;请你按照字典序将所有的排列方法输出。 输入格式 共一行&#xff0c;包含一个整数 n。 输出格式 按字典序输出所有排列方案&#xff0c;每个方案占一行。 数…

189: 素数判定(python)

收藏 难度&#xff1a;简单 标签&#xff1a;暂无标签 题目描述 给你两个数a、b,现在的问题是要判断这两个数组成的区间内共有多少个素数 输入 多组测试数据。 每个测试数据输入两个数a、b。(2<a,b<1000) 输出 输出该区间内素数的个数。 样例输入复制 2 4 4 6样例…

Starknet 训练营 Demo Day 顺利举办!获奖选手勇攀 Starknet 开发新高峰!

当全链游戏成为 2024 年 Web3 行业的热门关键词时&#xff0c;你是否注意到了一个冉冉升起的潜力生态——Starknet&#xff1f; Starknet 是基于 ZK-Rollup 技术的去中心化 L2 协议。由于其基于一种高度可扩展的密码学证明系统&#xff0c;便称为 STARK&#xff0c;使 DApp 能…

搭建一个自己的AI学术语音助手(一)

背景&#xff1a; 大模型出来后语音助手借着LLM的语义理解、知识组织能力的提升&#xff0c;升级了一波buffer。然后在使用这些语音助手的时候总觉得缺了点什么&#xff0c;但也讲不出来具体缺了什么。这几天的思考突然有了灵感&#xff0c;其实缺的就是自己的知识内容如何变成…

F-logic DataCube3 任意文件上传漏洞复现(CVE-2024-25832)

0x01 产品简介 F-logic DataCube3是一款用于光伏发电系统的紧凑型终端测量系统。 0x02 漏洞概述 F-logic DataCube3 /admin/setting_photo.php接口处存在任意文件上传漏洞 ,未经身份验证的攻击者可通过该漏洞在服务器端写入后门,获取服务器权限,进而控制整个web服务器。 …

细品spring设计,可扩展性编程Aware接口,Adapter类

Spring中的扩展点介绍 Aware接口 在Spring中&#xff0c;Aware接口是一组特定的接口&#xff0c;用于向Bean提供特定的资源或信息。通过实现Aware接口&#xff0c;Bean可以感知到容器的特定状态或资源。 常见的Aware接口包括&#xff1a; BeanNameAware&#xff1a;获取当前…

C语言深度理解之——结构体内存对齐

前言&#xff1a; 在C语言中&#xff0c;结构体&#xff08;struct&#xff09;是一种用户自定义的数据类型&#xff0c;可以包含不同类型的数据成员。在定义结构体时&#xff0c;编译器会根据平台的要求对结构体的内存进行对齐&#xff0c;以提高内存访问的效率。结构体内存对…

SpringBoot拦截器获取token用户对象优雅地传递到Controller层

项目场景&#xff1a; SpringBoot拦截器获取token用户对象优雅地传递到Controller层 问题描述 后端有许多接口都需要请求中携带有正确的Token&#xff0c;这时采用拦截器来验证token&#xff0c;但是每个接口都还是需要解析一遍token&#xff0c;浪费资源&#xff0c;不免显得…