OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4879|回复: 10

uasrt串口问题

[复制链接]

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
发表于 2013-7-8 11:24:57 | 显示全部楼层 |阅读模式
同时开启串口1,串口2,串口1,收发正常,串口2发正常,接收不正常;接受数据总是错误的。
-------------------------------------------
        RCC_PCLK2Config(RCC_HCLK_Div2); /* PCLK2 = HCLK/2 */
        RCC_PCLK1Config(RCC_HCLK_Div2); /* PCLK1 = HCLK/2 */
--------------------------------------------
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel; /* 使能USART1中断 */
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
-------------------------------------------
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; /* USART1 RX配置(Input Floating) */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//USART1 TX
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; /* USART1 TX配置(Push-Pull) */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
------------------------------------------------------------------------------------------------------------------------
        USART_InitStructure.USART_BaudRate = USART_BAUD_9600;
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_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_FIFOInit(&gsUsartRxFifo[0]); /* 初始化FIFO */
USART_FIFOInit(&gsUsartTxFifo[0]);
//USART_InitStructure.USART_BaudRate = USART_BAUD_9600;
USART_Init(USART2, &USART_InitStructure);
USART_FIFOInit(&gsUsartRxFifo[1]); /* 初始化FIFO */
USART_FIFOInit(&gsUsartTxFifo[1]);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); /* 使能USART1接收中断 */
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); /* 使能USART2接收中断 */
USART_ITConfig(USART2, USART_IT_LBD, DISABLE); /* 使能USART2接收中断 */
USART_Cmd(USART1, ENABLE); /* USART1使能 */
USART_Cmd(USART2, ENABLE); /* USART1使能 */
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void USART2_ISR(void)
{
if (USART_GetITStatus(USART2, USART_IT_TXE) != RESET) /* 发送 */
{
USART_ITConfig(USART2, USART_IT_TXE, DISABLE); //禁止发送空中断
if (USART_FIFORead(&gsUsartTxFifo[1], &gsUsartTxBuf[1]) != USART_FIFO_EMPTY)
{
giUsartTxCount[1] = 0;
giUsartTxFlag[1] = 1; //发送数据中
USART_TXByte(USART2, gsUsartTxBuf[1].DATA[giUsartTxCount[1]++]);
USART_ITConfig(USART2, USART_IT_TC, ENABLE); //使能发送完成中断
}
else
{
USART_ITConfig(USART2, USART_IT_TC, DISABLE);
}
}
if (USART_GetITStatus(USART2, USART_IT_TC) == SET) /* 发送完成 */
{
if (giUsartTxCount[1] < gsUsartTxBuf[1].SIZE)
{
USART_TXByte(USART2, gsUsartTxBuf[1].DATA[giUsartTxCount[1]++]);
}
else
{
if (USART_FIFOStatus(&gsUsartTxFifo[1]) != 0)
{
USART_ITConfig(USART2, USART_IT_TXE, ENABLE); //FIFO还有数据,准备发送
}
else
{
giUsartTxFlag[1] = 0; //发送完
USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
USART_ITConfig(USART2, USART_IT_TC, DISABLE);
USART2_RX_EN();  //发送完毕即切换至接收使能,半双工处理方式 
}
}
}
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
USART_Str[1].USART_Rx_Buf[USART_Str[1].USART_Rx_H]=USART_ReceiveData(USART2);
USART_Str[1].USART_Rx_H++;
if(USART_Str[1].USART_Rx_H>=USART_RX_LENGTH)
USART_Str[1].USART_Rx_H=0; 
}
}
-----------------------------
硬件仿真发现USART_SR_LBD总是1;所有寄存器我看了。串口1和串口2就这个位寄存器值不同。求帮助!





















ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-8 12:01:32 | 显示全部楼层
我用寄存器的,用的很好,没出过问题哦.
你可以去看看我们的蓝牙模块/GPS模块/GSM模块的例程,都用到了2个串口.串口1和串口2
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-8 12:37:14 | 显示全部楼层
更奇怪的是串口2可以发正常,就是接收有问题。
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-8 14:01:46 | 显示全部楼层
求帮助!!!!!!!!!!!!!1
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-8 14:05:54 | 显示全部楼层
探测到LIN断开 这个状态位总是置为1
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-8 14:31:31 | 显示全部楼层
初始化步骤应该没问题把。我注释掉串口1.还是不行。
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-8 15:44:36 | 显示全部楼层
你的中断服务函数,表示没看到过:
void USART2_ISR(void)
这是你自创的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-8 17:18:30 | 显示全部楼层
是的。我把他添加到了IT.C库的中断函数里。问题解决了。想死的心都有了。原因很简单。硬件问题。RX接了上拉电阻就可以了。STM32RX是悬浮输入。唉!
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

1

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-5-31
在线时间
1 小时
发表于 2013-7-9 10:05:47 | 显示全部楼层
你的硬件不是485吗,也要上拉
回复 支持 反对

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2013-7-11 09:16:29 | 显示全部楼层
回复【9楼】jobwork:
---------------------------------
不知道怎么回事。是需要上拉RX。
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复 支持 反对

使用道具 举报

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2015-3-11
在线时间
0 小时
发表于 2015-9-4 13:27:28 | 显示全部楼层
LBD状态位总是置1,肯定是因为RX设置成下拉或者浮空输入了,原则上RX是要设置成上拉输入的。亲测RX设置成上拉可以解决LIN断开的问题
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 05:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表