• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

usart串口实验

瞩目人kri 2018-09-29 浏览量:607
为什么我的程序是这样的会一直输出a啊,怎么样才能输出一次啊
# include <usart.h>
# include <delay.h>
# include <sys.h>
# include <stm32f10x.h>
u16 res='a';
int main ()
{
   

        uart_init(115200);
        USART_SendData(USART1 res);
   while (USART_GetFlagStatus(USART1 USART_FLAG_TC)==RESET);
   
                        
}
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 你的SendData函数是发送一个字符的,所以问题的根源是你下面那句while(...)判断标志位的语句,你试试在SendData下面加一行while(1);就只会输出一个字符。

    • 发布于 2018-09-29
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:13
  • 你这个是 main 外面在循环, 汇编文件main 后面有个 b xxx 就是这个循环在起作用。

    你可以把 USART_SendData 后面加个 while(1);然后他就在这里死循环了。发一个 a, 然后就傻傻的空跑了,不再发了。


    • 发布于2018-09-29
    • 举报
    • 评论 0
    • 1
    • 0

  • USART_SendData(USART1res),首先你这个应该有个逗号​,不然会出现语法错误,输出一次的话在Send后面加个while(1);就可以
    • 发布于2018-09-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 你这里用的while有问题,应该改为!=才对吧,因为这个main函数是一个不断循环执行的函数,需要将它阻塞在某个地方才能执行一次的
    • 发布于2018-09-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 应该是!=reset才对,这个是你自己写错了,可以参考例程
    • 发布于2018-10-01
    • 举报
    • 评论 0
    • 0
    • 0

  • 你这个程序里有很多不合适的地方,建议看pack包里的例程  printf的例子,更容易理解使用和执行过程。
    • 发布于2018-10-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 因为你没有死循环语句,一个发送完了之后又会从main()开始执行,就会一直循环,相当于你的这些代码一直在运行,一般单片机都是要有死循环来控制哪部分代码在启动之后只执行一次(一般都是一些器件的初始化代码,比如你的串口初始化的代码),哪些需要一直运行,等。没有死循环的话,程序执行完了之后又会从头开始执行了
    • 发布于2018-10-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 发送完后面写一个死循环试试
    • 发布于2018-10-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 发送完成后需要进入死循环,才能实现一次发送,也就是while(1)。
    • 发布于2018-10-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 你可以在发送后设置死循环不停执行
    • 发布于2018-10-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 要在你的发送成功后循环再次发送
    • 发布于2018-10-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 你的循环语句编写有问题,建议仔细检查一下
    • 发布于2018-11-11
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

usart串口实验