社区导航

 
查看: 710|回复: 4

[求助] STM32F103的串口接收显示

[复制链接]

94

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-2-24 17:15:10 | 显示全部楼层 |阅读模式
3芯币
我想实现的目的是通过PC上的串口助手给MCU发一个字符,在程序里面可以把这个字符读出来,并且把这个字符付给一个变量,再把这个变量的值付给一个IO口,现在IO口看他的输出波形,不知道这么说你们明不明白,因为刚接触STM32好多地方不懂所以表达的可能也不准确不清楚,找了一个历程,可以实现通过PC给MCU发送字符,MCU在把接收到的字符通过PC上的串口助手显示出来,我就在该程序中串口的接收部分改了一点,程序中的“jieshou”被我定义到了一个IO口,但是串口助手在持续发送,IO口一直是低电平,我也感觉我改的串口接收的这一部分有问题,但是又不知道怎么改才是对的,所以希望大家能给我讲讲该怎么改,其他地方都没改过,之前的程序我也试过了是好的,可以实现PCF发字符给MCU,MCU再将字符返给PC,下面这个是我给的串口中断程序的部分

QQ图片20170224170230.png

回复

使用道具 举报

94

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2017-2-24 17:24:05 | 显示全部楼层
void USART1_IRQHandler(void)
{  int RX_status;  //自己定义一个标志位
RX_status = USART_GetFlagStatus(USART1, USART_FLAG_RXNE);//读取接收数据标志位,如果装好了一帧数据则硬件将其置一。
if(RX_status == SET) {
USART_SendData(USART1 , USART_ReceiveData(USART1));//将收到的数据再由STM32发送给PC机。
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);//等待发送完成。

}
}

这个是这部分程序原来的样子

回复

使用道具 举报

37

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-2-24 18:04:10 | 显示全部楼层
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET)这个语句后面加上  ;  试试。
你这样写的情况是在等待发送完成的时候才会进入for循环赋值语句,如果while语句在判断发送标志位的之前已经发送结束了,就不会进入for循环,IO口自然不会有变化

回复

使用道具 举报

591

TA的帖子

1

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2017-2-24 21:58:03 | 显示全部楼层
中断里面可以不用单独定义一个标志,就用官方例程的 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) 挺好的;
最好定义变量放在函数开头;
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET)這句后面少了“;”,這句代码可以不要;
看代码你是想把接收到的一个字节按位赋值给一个IO口,但你程序for执行后,IO口的状态就是接收到字节的最低位,你看看你发送的数据最低位是0还是1,如果是0 那么程序现象是正常的, 因为前面的7次电平变化很快 根本看不到;
最后那合成一句多好 jieshou = ((Res << a) & 0x80) >> 7;
疏雨客晚归,荒烟乱,几许江南无晴!又落花,残香织梦,莫  莫  莫,白首衷肠……

回复

使用道具 举报

1

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-3-5 22:43:43 | 显示全部楼层
arduino形式的行不?
//STM32F103C8T6
void setup() {
Serial.begin(115200);
pinMode(PC13,OUTPUT);
}
void loop() {
  digitalWrite(PC13,HIGH);
  if (Serial.available()==1);{
    byte date = Serial.read();
      if (date != 255){
        Serial.print(char(date));
        for(int i = 0;i < 8;i++){
          digitalWrite(PC13,(date & 0x80));
          date = date << 1;
          delay(100);
        }
      }
   }
}

回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-7-28 10:49 , Processed in 5.259955 second(s), 13 queries , Redis On.

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