OpenEdv-开源电子网

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

求指教串口试验程序

[复制链接]

22

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2012-5-15
在线时间
2 小时
发表于 2012-5-27 12:56:39 | 显示全部楼层 |阅读模式
 

int main(void)
{   
 u8 t;
 u8 len; 
 u16 times=0; 
 Stm32_Clock_Init(9); //系统时钟设置
 delay_init(72);      //延时初始化
 uart_init(72,9600);  //串口初始化为9600
 LED_Init();      //初始化与LED连接的硬件接口   
 while(1)
 {
  if(USART_RX_STA&0x80)
  {       
   len=USART_RX_STA&0x3f;//得到此次接收到的数据长度
   printf("\n您发送的消息为:\n");
   for(t=0;t<len;t++)
   {
    USART1->DR=USART_RX_BUF[t];
    while((USART1->SR&0X40)==0);//等待发送结束
   }
   printf("\n\n");//插入换行
   USART_RX_STA=0;
  }else
  {
   times++;
   if(times%5000==0)
   {
    printf("\nMiniSTM32开发板 串口实验\n");
    printf("正点原子@ALIENTEK\n\n\n");
   }
   if(times%200==0)printf("请输入数据,以回车键结束\n"); 
   if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
   delay_ms(10);  
  }
 } 
}

 

 

主函数中的  if(USART_RX_STA&0x80)
  {       
   len=USART_RX_STA&0x3f;//得到此次接收到的数据长度

如果进入if,那么
USART_RX_STA应该为0x80.
随后len=USART_RX_STA&0x3f =0x80&0x3f  不就为0吗?
我知道原子哥的程序肯定是对的,仿真结果肯定是正确的,我就像知道我是哪里像错了?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-5-27 13:55:11 | 显示全部楼层
len=USART_RX_STA&0x3f =0x80&0x3f  不就为0吗? 
不一定是0.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2012-5-15
在线时间
2 小时
 楼主| 发表于 2012-5-27 18:08:37 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥这个我知道 它肯定不会一直是0, 但只是我在想,进入if(USART_RX_STA&0x80)
,此时的USART_RX_STA不是等于0x80吗,len=USART_RX_STA&0x3f =0x80&0x3f  不就是等于0吗?
我就是不明白在什么位置,让这个USART_RX_STA变量数值变化,希望您多说一点,我纠结好久了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-5-27 21:31:31 | 显示全部楼层
 在中断服务函数.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2012-5-15
在线时间
2 小时
 楼主| 发表于 2012-5-27 22:09:25 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
我看到服务函数写的是 接收到数据完整时 赋值USART_RX_STA=0x80,然后在执行主函数main中的if(USART_RX_STA&0x80) 发送刚才接收到的数据,USART_RX_STA&0x80为真,那么len=USART_RX_STA&0x3f ,由于USART_RX_STA=0x80,那么len不就为0吗?我就是依次这么看的,请原子哥提示一下,哪个地方我出现的错误?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-5-27 23:41:42 | 显示全部楼层
回复【5楼】mredge:
---------------------------------
....
叫你仿真跟踪一遍了....
给你个题目.
假设:a=0X8F;
执行完b=a&0X80;之后.
a的值是多少?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2012-5-15
在线时间
2 小时
 楼主| 发表于 2012-5-28 07:12:06 | 显示全部楼层
回复【6楼】正点原子:
--------------------------------- 
抱歉 有个地方忽略了  if(res==0x0d)USART_RX_STA|=0x40; 直接将或的符号带过了,直接以为赋值为0x40,所以USART_RX_STA还可以等于0x81 ..0x8F
让if(USART_RX_STA&&0x80)为真的条件,它不一定只是等于0x80
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-5-28 17:07:37 | 显示全部楼层
你位操作要好好学学,自己多做做练习题吧!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 02:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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