查看: 473|回复: 0

【飞控开发基础教程3】疯壳·开源编队无人机-串口

[复制链接]
  • TA的每日心情
    开心
    2022-4-17 15:37
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2022-8-15 10:14:29 | 显示全部楼层 |阅读模式
    分享到:
    COCOFLY教程
    ——疯壳·无人机·系列
    串口(基础收发)




    1.png
        图1


        一、串口简介

        在嵌入式开发领域讲的串口通常指的是 UART,UART 即为通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)。是一种通用串行数据总线, 用于异步通信。该总线双向通信,可以实现全双工传输和接收。
        UART 常常用于两个单片机之间进行数据传输,如下图所示。

    2.png    
        图2
        其通信过程如下图所示。

    3.png
    图3
        STM32F103 提供了 3 路串口,支持同步单线通信和半双工单线通信、支持LIN、支持调制解调器操作、智能卡协议和 IrDA SIR ENDEC 规范、具有 DMA 等。可配置为串口的引脚是有限制的,所以在设计硬件电路时需要注意哪些引脚可以配置为串口引脚,如下表所示。
        串口管脚映射

    4.png   
        图4



        二、UART 串口通讯协议

        串口通讯过程中一帧数据包含了起始位、数据位、停止位以及可有可无的奇偶校验位,除了需要知道这些概念外,还需要理解波特率的概念。
        (1)起始位,当未有数据发送时,数据线处于逻辑“1”状态;先发出一个逻辑“0”信号,表示开始传输字符;
        (2)数据位,紧接着起始位之后的 8 个数据。从最低位开始传送;
        (3)奇偶校验位,一般不用;
        (4)停止位,一般为 1 位(也可以是 1.5 位或者 2 位),为高电平。作为结束的标志;
        (5)波特率,波特率表示每秒钟传送的码元符号的个数,是衡量数据传送速率的指标。
        如下图所示,为一帧串口数据的帧组成。

    5.png
    图5
        三、UART 串口寄存器

        STM32F103 与串口相关的寄存器众多,这里只讲解重要的几个寄存器。
        (1)USART_SR:状态寄存器,如下图所示:

    6.png
    图6
        需要了解的位有:TXE:发送寄存器为空;TC:发送完成;RXNE:读取数据寄存器不为空;ORE:上溢错误;FE:帧错误;PE:奇偶校验错误。
        (2)USART_DR:该寄存器只有低 8 位有效,而且具有读写操作,有关该寄存器中的数据是要发送的数据还是接受到的数据取决于执行的操作是“读取” 还是“写入”。 如下图所示:

    7.png    
        图7

        (3)USART_BRR:波特率寄存器,用于设置串口通讯的波特率,如下图所示:

    8.png    
        图8
        其中在寄存器中会设定相应的值,DIV_Mantissa[11:0]用来设定分频系数的整数部分,DIV_Fraction[3,0]用来设定分频系数的小数部分。
        串口的波特率计算公式如下:

    公式1.png    
        公式1

        这里的 fPCLKx(x=1、2)是给外设的时钟(PCLK1 用于 USART2、3、4、5, PCLK2 用于USART1,这里 STM32F103CBT6 没有的串口就不讲解)。USARTDIV是一个无符号的浮点数。假设串口波特率为 115200,使用的是串口 1,串口的时钟为 PCLK2 的时钟(即 APB2 总线的时钟)为 72MHz,如下图所示。

    9.png    
        图9
        根据公式可得:
        USARTDIV=72000000/(115200*16)=39.0625

        所以小数部分 DIV_Fraction=0.0625*16=1=0x01。


        整数部分 DIV_Mantissa=39=0x27。

        四、串口基础收发实验

        串口收发实验使用 STM32 的串口 1 即 UART1,通过串口模块连接电脑,使用串口调试助手来进行通信,STM32 收到数据后把收到的数据在发回电脑。串口引脚如下图所示:

    10.png    
        图10
        两个串口引脚分别与 PA9 与 PA10 引脚相连,那么我们就对 PA9 与 PA10 引脚以及串口模块进行配置,配置代码(通过调用官方库)。
        代码编写的思路如下:

        编程思路

    表1.png    
        表1
        串口初始化代码如下:

    11.png    
        图11
        串口中断函数代码如下:

    12.png    
        图12
        设置串口 1 的波特率为 115200,代码如下:

    13.png
        图13

        保存、编译、下载代码,把飞控上的 USART1 上接的视觉模块先拔下来, 然后接上 USB 转串口模块,如下图所示:

    14.png    
        图14
        然后在把 USB 转串模块插到电脑的 USB 口,打开电脑端的串口调试助手, 找到对应的 COM 口(前提是安装了 USB 转串口驱动),设置波特率为 115200, 打开,在串口调试助手的输入框内输入“www.fengke.club”,点发送,然后可以看到串口调试助手收到来自 STM32 的回发信息,也是“www.fengke.club”,如下图所示。

    15.png
        图15




    完整配套资料和对应开源套件地址:http://www.fengke.club

        文件下载请点击: 【3】串口(基础收发).pdf (889.23 KB, 下载次数: 1)
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-30 16:59 , Processed in 0.132321 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.