5269|16

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求教各位老大一个关于USART的问题 [复制链接]

在调试STM32F103的USART的时候,
USART1初始化后在一个while(1)里面循环发数据正常
用USART1的初始化配置改成USART2后,包括时钟、引脚等配置都改成USART2
然后在while(1)循环里面发数据,用串口接收的时候只能接收到一次,而且接收完一次数据后最后一个是乱码。

不知何故,请高手指教
此帖出自stm32/stm8论坛

最新回复

                                 如果你设置了ORE这些,必须在中断中处理掉出错。否则usart当然会有问题了。  详情 回复 发表于 2010-11-25 11:01
点赞 关注
 

回复
举报

92

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
捕获.JPG
这个改了吗
此帖出自stm32/stm8论坛
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
定义的哪两个引脚?不是配置到需要重映射的引脚上了吧?
再就是上面说的时钟使能配置。
别的我也不知道了。
也刚开始学。
此帖出自stm32/stm8论坛
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
谢谢楼上的新手兄弟A4——>CORE_PIN29

不是你说的那个GPIOC。
USART1在APB1总线上,而USART2在APB2总线上
USART1只有TX和RX两个引脚
但是USART2除了TX和RX,还有CTS和RTS和CK
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
我的硬件是直接连到PA2和PA3,没有用其他的pin引脚。
没有REMAP。
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 


“USART1在APB1总线上,而USART2在APB2总线上”
这个应该看看手册

至于重映射的问题我只是问问,因为我不知道你怎么连的。毕竟还是有这种可能的。

澄清下GPIOC的问题,我只是从一个文档里截的图,不是我自己标注的,
那图只是想说明USART1和USART2时钟。
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 


捕获2.JPG
捕获3.JPG
不知道我的资料有没有错误
此帖出自stm32/stm8论坛
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 我刚学没几天,细节不太明白,还得仔细看手册
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 嗯。。谢谢你。
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

10
 
不客气,我也不会太多
遇上自己知道的就回复一个
还得努力学习
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

1

TA的资源

一粒金砂(初级)

11
 
                                 楼主你怎么知道配置是否正确?
此帖出自stm32/stm8论坛
 
 
 

回复

52

帖子

0

TA的资源

一粒金砂(初级)

12
 



老大,您的建议很犀利。。
以下是我的初始化,您能顺便帮我指出一下我的配置哪里有问题吗?
谢谢版主。


void USART2_SETUP()
{
GPIO_InitTypeDef GPIO_InitStructure;   //声明一个GPIO初始化的结构变量 GPIO_InitTypeDef
USART_InitTypeDef USART_InitStructure;  //声明一个USART初始化的结构变量 USART_InitStructure
USART_ClockInitTypeDef USART_ClockInitStruct;//声明一个USARTx时钟初始化的结构变量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); //屏蔽RCC_APB2Periph_AFIO
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 , ENABLE);
//使能使用到的功能模块的时钟
   //一,以下用来配置USART2的AFIO引脚
   //1,配置USART_TX引脚为AF_PP模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;    //选择PA2
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
   //2,配置USART_RX引脚为AF_OD模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;    //选择PA3
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
   //二,以下用来配置USART2的相关初始化
    USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
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_Tx | USART_Mode_Rx;
USART_Init(USART2, &USART_InitStructure);
   //三,以下用来配置USART2的时钟初始化
    USART_ClockInitStruct.USART_Clock   = USART_Clock_Disable   ;
USART_ClockInitStruct.USART_CPOL   = USART_CPOL_Low        ;
USART_ClockInitStruct.USART_CPHA   = USART_CPHA_1Edge     ;
USART_ClockInitStruct.USART_LastBit   = USART_LastBit_Disable    ;
USART_ClockInit(USART2, &USART_ClockInitStruct);
USART_Cmd(USART2, ENABLE);//使能USART2外设
}
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

13
 
                                 顶到让你看见。。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

14
 
没有看到你的USART_ITConfig ,你如何进入接收中断?

其实只要遵循以下几步,就不会有问题:
1. Enable RCC_APB1PeriphClockCmd
2. TX 设为 GPIO_Mode_AF_PP GPIO_Speed_50MHz
    RX 设为 GPIO_Mode_IN_FLOATING, GPIO_Speed_50MHz
3. NVIC_Init 中断向量设置
4.  USART_Init
5. USART_ITConfig
6. USART_Cmd (enable)
只要你没有遗漏,USART就能正常工作。 剩下的就是具体看你的需求配置了,包括波特率等等。
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

15
 
to 14楼:
谢谢兄弟的关注。

我只是用USART2来发送数据
没有用来接收数据。

我的初始化流程基本包括了你所说的流程。

昨晚得高人指点,准备去查一下USART2的错误寄存器
可能原因是USART2的错误寄存器有些标志位置位了没有处理。
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

16
 
因为后面人为的造成了硬件问题,所以这个问题最后不了了之了。
对这个程序有兴趣的朋友可以联系我,我把源代码发给你试一下。

个人觉得这个程序代码是没有问题的。

谢谢楼上各位热心的兄弟。
谢谢版主你犀利的建议。
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

17
 
                                 如果你设置了ORE这些,必须在中断中处理掉出错。否则usart当然会有问题了。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表