GD32系列笔记二:USART

目录

一、通信基础概念

二.、USART协议原理

三.、USART配置源码,只作打印调试用,不作接收,所以不用配置中断

四、遇到的问题

五、总结


一、通信基础概念

1. 单工:一根线,单方向通信,代码写完后就确定了是A传给B,还是B传给A;

2. 半双工:一根线,双向传输,但同一时刻要么A传B,要么B传A;

3. 全双工:两根线,双向传输,可同时发送接收,A传B的同时B也可以传A

4. 同步:带时钟线,双方按照约定好的时钟边沿进行数据的加载、移位、发送

5. 异步:不用时钟线进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据,某些通讯中还 需要双方约定数据的传输速率(波特率) ,以便更好地同步。

6. 串行:同一时刻只能传输一个数据位的数据,比并行通信的传输距离远,抗干扰能力强

7. 并行:同一时刻可以传输多个数据位的数据

8. 串口、COM口、UART口一般指的是硬件接口,TTL、RS-232、RS-485则是逻辑电平0和1的不同表示标准。

9.奇校验:数据流+校验位的1的个数是奇数

10.偶校验:数据流+校验位的1的个数是偶数

http://t.csdn.cn/FSMZa

http://t.csdn.cn/bcwOW

二.、USART协议原理

1. 全双工,异步收发

2. 硬件连线(借图)

3. 通信协议:

(1)空闲信号:数据位为高

(2)起始位:数据位为低

(3)停止位:数据位为高

(4)数据位:8位或者9位

(5)校验位:1位,最高位

 

 4. 关于波特率

     波特率:bps,即 bit/second。发送和接收由一共用的波特率发生器驱动,当发送器和接收器的使能位分别置位时,分别为其产生时钟,不需要额外的时钟线

5. 关于几个重要寄存器

 (1)TEN:使能发送控制器。

 (2)TBE寄存器:当TBE=0,说明数据寄存器有数据待发送,将在下一周期取出到发送引脚,取 出后TBE=1。当CPU又写入新的数据,则TBE=0,如此循环。

 (3)当TBE持续为1时,说明发送完成,将TC置1.

三.、USART配置源码,只作打印调试用,不作接收,所以不用配置中断

 四、遇到的问题

1.用C自带的Printf()函数,串口调试助手不显示内容,打印失败!

问题原因:没有加入printf()重定向到串口的函数,把下面代码加入,好像放的位置无所谓,我直接加到串口配置的.c文件下

2.在别的工程上发现加入printf()重定向后也无法打印

问题原因:在KEIL的魔术棒Target勾选Use MicroLIB,就是使用C库的意思。问题解决。

3.PC端无法识别串口

问题原因:板子上的BOOT盖帽没盖 ,关于boot可参考http://t.csdn.cn/wxiIP

4.串口在while(1)里只打印一次

 debug现象:程序卡死在如下的201行。

问题原因:B .表示触发了某个中断, 但是没有清除中断标志位,该行在systick_handler下,而且主函数里屏蔽掉systick_config()就可以正常打印,答案很明显了。出现该问题的原因是gd32f1x0_it.c这个文件是在官方的USBD库里面拷贝过去的,该文件没用systick的中断处理函数,一旦进入中断就会卡死。加入以下代码即可。

 

 五、总结

1. 首先没有明确串口的实际项目需求:只作调试,那只需要打印就好了,一开始在接收数据方面花了较多时间;

2. 以前用STM32有搞过一次串口,但没有对问题进行总结,导致周而复始的去查询相关知识,浪费没必要的时间;

3. 遇到问题就慌了阵脚,自己写的每一行代码应该都要清除该代码的意义,对于一些外设核心代码也要知道个大概运作流程,否者出问题无从查起。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值