stm32串口通信问题,快崩溃了,求帮助~谢谢大神们!

baidu_19554645 2014-10-15 03:11:05
USARTA的初始化应该不会有问题的,按照道理应该只会发20个字符啊,怎么会发了好几百个字符,还有好多乱码,快疯了啊。求帮助!!谢谢!!下面是发送后产生的乱码和主程序:
发送后的字符:敽患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁许
主程序:
int main(void)
{
vu16 i = 0;
char data;
/* 设置系统时钟 */
RCC_Configuration();
/* 设置GPIO端口 */
GPIO_Configuration();
/* 设置USART */
USART_Configuration();
data='A';
while(1)
{

USART_SendData(USART1,data);
data++;
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
/* 等待USART1接收数据完毕 */

}
}

...全文
1058 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_19554645 2014-10-24
  • 打赏
  • 举报
回复
引用 16 楼 zhxianbin 的回复:
[quote=引用 9 楼 baidu_19554645 的回复:] [quote=引用 8 楼 zhxianbin 的回复:] while(1) { for(i<20;i++) { } } 你这还是不停发啊, 而且 ‘A’ 一直加乱码很正常
我知道问题出在哪里,但是改不了,如果只用FOR循环,不用WHILE(1),数据发不了,用了WHILE(1)才能发送~但是会多发很多数据~不知道怎么改才可以。无法解决诶。[/quote] 你解决问题的思路不对,应该是找为什么发不了,而不是加一个死循环,然后发个帖问为什么不停输出,为什么不发帖问为什么无法输出呢?! 关于 stm32 的资料网上多的是,找个改改就行了[/quote]。。程序重新写了又可以了~真奇怪。。谢谢帮助~~
vector_ming 2014-10-20
  • 打赏
  • 举报
回复
自己写的有问题,就多多参考别人的程序吧,要 看懂了 再用。
mangoalx 2014-10-17
  • 打赏
  • 举报
回复
可能是需要一定延时。不加死循环程序一下就跑过去了所以看不到接收。去掉while循环,加一个延时程序看看
richyhuang 2014-10-16
  • 打赏
  • 举报
回复
发送没有挺是正常的,改成6楼的应该就可以了.
玉怀一捧雪 2014-10-16
  • 打赏
  • 举报
回复
引用 9 楼 baidu_19554645 的回复:
[quote=引用 8 楼 zhxianbin 的回复:] while(1) { for(i<20;i++) { } } 你这还是不停发啊, 而且 ‘A’ 一直加乱码很正常
我知道问题出在哪里,但是改不了,如果只用FOR循环,不用WHILE(1),数据发不了,用了WHILE(1)才能发送~但是会多发很多数据~不知道怎么改才可以。无法解决诶。[/quote] 怎么可能。不用while(1),下完程序,然后打开串口助手,复位stm32,肯定是有数据的。 data你定义的是一个8位的字节,最大255,你不停得自加,数据溢出了。
baidu_19554645 2014-10-16
  • 打赏
  • 举报
回复
引用 6 楼 lkshflasgla 的回复:

int main(void)
{
    vu16 i = 0;	
   unsigned char data;

    /* 设置系统时钟 */
    RCC_Configuration();
    /* 设置GPIO端口 */
    GPIO_Configuration();
    /* 设置USART */
    USART_Configuration();

    data='A';

   for(i = 0;i<20;i++)
  {
        USART_SendData(USART1,data);
        data++;
  	 while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
        /* 等待USART1接收数据完毕 */
  }

 while(1);
}
看看这样行不行
不行诶。我现在是乱码没有了,但是因为有个WHILE循环,还是会发很多数据,用控制信号的话,一个数据也发不出~~
baidu_19554645 2014-10-16
  • 打赏
  • 举报
回复
引用 8 楼 zhxianbin 的回复:
while(1) { for(i<20;i++) { } } 你这还是不停发啊, 而且 ‘A’ 一直加乱码很正常
我知道问题出在哪里,但是改不了,如果只用FOR循环,不用WHILE(1),数据发不了,用了WHILE(1)才能发送~但是会多发很多数据~不知道怎么改才可以。无法解决诶。
zhxianbin 2014-10-16
  • 打赏
  • 举报
回复
引用 9 楼 baidu_19554645 的回复:
[quote=引用 8 楼 zhxianbin 的回复:] while(1) { for(i<20;i++) { } } 你这还是不停发啊, 而且 ‘A’ 一直加乱码很正常
我知道问题出在哪里,但是改不了,如果只用FOR循环,不用WHILE(1),数据发不了,用了WHILE(1)才能发送~但是会多发很多数据~不知道怎么改才可以。无法解决诶。[/quote] 你解决问题的思路不对,应该是找为什么发不了,而不是加一个死循环,然后发个帖问为什么不停输出,为什么不发帖问为什么无法输出呢?! 关于 stm32 的资料网上多的是,找个改改就行了
Lion_Peng 2014-10-16
  • 打赏
  • 举报
回复
引用 10 楼 baidu_19554645 的回复:
[quote=引用 6 楼 lkshflasgla 的回复:]

int main(void)
{
    vu16 i = 0;	
   unsigned char data;

    /* 设置系统时钟 */
    RCC_Configuration();
    /* 设置GPIO端口 */
    GPIO_Configuration();
    /* 设置USART */
    USART_Configuration();

    data='A';

   for(i = 0;i<20;i++)
  {
        USART_SendData(USART1,data);
        data++;
  	 while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
        /* 等待USART1接收数据完毕 */
  }

 while(1);
}
看看这样行不行
不行诶。我现在是乱码没有了,但是因为有个WHILE循环,还是会发很多数据,用控制信号的话,一个数据也发不出~~[/quote] 把初始化代码也贴上来
of123 2014-10-16
  • 打赏
  • 举报
回复
一定想用 while 也可以: while(1) { USART_SendData(USART1,data); data++; while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET); /* 等待USART1发送数据完成 */ i++; if(i = 20) break; } while(1);
baidu_19554645 2014-10-16
  • 打赏
  • 举报
回复
引用 12 楼 richyhuang 的回复:
发送没有挺是正常的,改成6楼的应该就可以了.
改成6楼了也不行诶,就是没有发送数据,不知道为什么,发送程序只有写在WHILE(1)程序里才能发,我也不知道为什么~~
zhxianbin 2014-10-15
  • 打赏
  • 举报
回复
while(1) { for(i<20;i++) { } } 你这还是不停发啊, 而且 ‘A’ 一直加乱码很正常
xqhrs232 2014-10-15
  • 打赏
  • 举报
回复
data++;你让他一直死循环地加下去?
Lion_Peng 2014-10-15
  • 打赏
  • 举报
回复

int main(void)
{
    vu16 i = 0;	
   unsigned char data;

    /* 设置系统时钟 */
    RCC_Configuration();
    /* 设置GPIO端口 */
    GPIO_Configuration();
    /* 设置USART */
    USART_Configuration();

    data='A';

   for(i = 0;i<20;i++)
  {
        USART_SendData(USART1,data);
        data++;
  	 while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
        /* 等待USART1接收数据完毕 */
  }

 while(1);
}
看看这样行不行
woxiaoniu_ 2014-10-15
  • 打赏
  • 举报
回复
for(i=0;i<20;i++) { while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET); USART_SendData(USART1,data); data++; } 改成这样 应该没问题
baidu_19554645 2014-10-15
  • 打赏
  • 举报
回复
引用 3 楼 xqhrs232 的回复:
在拿STM32做什么项目?
也不是什么项目,呵呵~毕业设计用STM32, 要用到串口通信,就有这个问题,不知道毛病出在哪里了~
xqhrs232 2014-10-15
  • 打赏
  • 举报
回复
在拿STM32做什么项目?
baidu_19554645 2014-10-15
  • 打赏
  • 举报
回复
引用 1 楼 u010077667 的回复:
你这不是一直在发送吗 怎么会只发20个字符?
不好意思啊,复制错了,下面这个 int main(void) { vu16 i = 0; char data; /* 设置系统时钟 */ RCC_Configuration(); /* 设置GPIO端口 */ GPIO_Configuration(); /* 设置USART */ USART_Configuration(); data='A'; while(1) { for(i<20;i++) { USART_SendData(USART1,data); data++; while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET); /* 等待USART1接收数据完毕 */ } } }
woxiaoniu_ 2014-10-15
  • 打赏
  • 举报
回复
你这不是一直在发送吗 怎么会只发20个字符?

27,521

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧