OpenEdv-开源电子网

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

USART2无法接收到数据

[复制链接]

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2014-8-23 15:05:10 | 显示全部楼层 |阅读模式
5金钱
使用原子哥的模板,对USART2进行配置如下,但是无法收到数据,求高手帮忙看一下一下配置是否有问题,谢谢~

#ifdef EN_USART2_RX   //如果使能了接收,头文件已经预定义了
u8 USART_RX_STA=0;       //接收状态标记   
  
void USART2_IRQHandler(void)
{
u8 res;    
if(USART2->SR&(1<<5))                            //接收到数据
{  
res=USART2->DR; 
if((USART_RX_STA&0x80)==0)                   //接收未完成
{
if(USART_RX_STA&0x40)                    //接收到了0x0d
{
if(res!=0x0a)USART_RX_STA=0;         //接收错误,重新开始
else USART_RX_STA|=0x80;           //接收完成了 
}else //还没收到0X0D
{
if(res==0x0d)USART_RX_STA|=0x40;
else
{
USART_RX_BUF[USART_RX_STA&0X3F]=res;
USART_RX_STA++;
if(USART_RX_STA>63)USART_RX_STA=0; //接收数据错误,重新开始接收  
}  
}
}       
}    

#endif  
//初始化IO 串口1
//pclk2CLK2时钟频率(Mhz)
//bound:波特率
//CHECK OK
//091209
void uart_init(u32 pclk1,u32 bound)
{    
float temp;
u16 mantissa;
u16 fraction;   
temp=(float)(pclk1*1000000)/(bound*16);          //得到USARTDIV
mantissa=temp;                     //得到整数部分
fraction=(temp-mantissa)*16;                     //得到小数部分  
    mantissa<<=4;
mantissa+=fraction; 
RCC->APB2ENR|=1<<2;                              //使能PORTA口时钟  
RCC->APB1ENR|=1<<17;                             //使能串口时钟 
GPIOA->CRL&=0XFFFF0FFF; 
GPIOA->CRL|=0X00008000;                          //IO状态设置
GPIOA->ODR|=0X08;
 
RCC->APB2RSTR|=1<<17;                            //复位串口2
RCC->APB2RSTR&=~(1<<17);                         //停止复位     
         
  USART2->BRR=mantissa;                            // 波特率设置  
USART2->CR1|=0X200c;                             //1位停止,无校验位,未使能接收(0x200c)
#ifdef EN_USART2_RX                             //如果使能了接收
USART2->CR1|=1<<8;                               //PE中断使能
USART2->CR1|=1<<5;                         //接收缓冲区非空中断使能    
MY_NVIC_Init(3,3,USART2_IRQChannel,2);           //组2,最低优先级 
#endif
}

最佳答案

查看完整内容[请看2#楼]

请参考我们的模块例程,比如GPS模块/蓝牙模块/GSM模块. 都有初始化串口2的代码.
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-23 15:05:11 | 显示全部楼层
请参考我们的模块例程,比如GPS模块/蓝牙模块/GSM模块.
都有初始化串口2的代码.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2014-8-24 09:47:33 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,我在用串口2进行模拟232实验,只是通过高低电平进行,发送数据端波形等正常,但是始终无法接收到数据,乱码也没有,串口2是完全模拟串口1配置的,时钟等都相应改了,不知道串口2和串口1是否还有需要注意的不同吗?我找了一下模块,可能我找的不对,网站里都是库函数版本的,对库函数不是很熟。
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2014-8-24 10:24:19 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
将串口改为usart1后使用原程序和usart1_rx进行测试仍然什么都收不到,接收数据处理如下:
if(USART_RX_STA&0X80)
{
len = USART_RX_STA & 0X3F;
for(t=0;t<len;t++)
{
table[t] = USART_RX_BUF[t];
}
USART_RX_STA = 0;
}
对table【】进行数据处理,处理结果始终是0,但是发送的不是0,应该是没收到,求指导~>
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2014-8-24 11:26:39 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
反复测试始终USART_RX_STA&0x80为0,周末加班,麻烦原子哥帮个忙、、、、、、
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-24 23:17:09 | 显示全部楼层
回复【5楼】龙之谷:
---------------------------------
先测试串口接收中断能否进入.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2014-8-25 09:44:48 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
昨天测试了一下午,结果:1.串口1能够进入,但是只能解读出来第一个字节的数据,其他字节没反应,并且第一个字节还会在读取7~11次出现一次错码。
                                    2.串口2完全对应串口1初始化及操作,和网上现存的初始化也一样,但始终无法进入中断,检查n遍没发现程序错误。
我现在怀疑接口波特率可能存在问题,正在编写串口1和串口2之间通信,还望原子哥帮忙分析其中原因~~~~~~
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
 楼主| 发表于 2014-8-25 13:41:53 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
串口1和串口2之间通信,串口2接收到的数据总是滞后一个字节,串口1发送0123456,串口2接收到1234560,求解决办法?
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-2 18:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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