2480|4

122

帖子

0

资源

一粒金砂(中级)

STM32F103的串口接收显示

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

QQ图片20170224170230.png

回复

122

帖子

0

资源

一粒金砂(中级)

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);//等待发送完成。

}
}

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

回复

47

帖子

0

资源

一粒金砂(中级)

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

回复

612

帖子

1

资源

一粒金砂(中级)

中断里面可以不用单独定义一个标志,就用官方例程的 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

帖子

0

资源

一粒金砂(初级)

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);
        }
      }
   }
}

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

关闭
站长推荐上一条 1/6 下一条

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

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

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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