找回密码
 注册
关于网站域名变更的通知
查看: 421|回复: 2
打印 上一主题 下一主题

疯壳AI开源无人机串口(基础收发)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-4-1 14:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
  • 串口简介8 x: H8 U: F' P7 X8 c( n
嵌入式开发领域讲的串口通常指的是UART,UART即为通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)。是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。
UART常常用于两个单片机之间进行数据传输,如下图所示。
其通信过程如下图所示。
STM32F103提供了3路串口,支持同步单线通信和半双工单线通信、支持LIN、支持调制解调器操作、智能卡协议和IrDA SIR ENDEC规范、具有DMA等。可配置为串口的引脚是有限制的,所以在设计硬件电路时需要注意哪些引脚可以配置为串口引脚,如下表所示。
串口管脚映射
串口号
RXD
TXD
1
PA10
PA9
2
PA3
PA2
3
PB11
PB10

/ U) r+ s" d, [3 r二、UART串口通讯协议
串口通讯过程中一帧数据包含了起始位、数据位、停止位以及可有可无的奇偶校验位,除了需要知道这些概念外,还需要理解波特率的概念。
  • 起始位,当未有数据发送时,数据线处于逻辑“1”状态;先发出一个逻辑“0”信号,表示开始传输字符;
  • 数据位,紧接着起始位之后的8个数据。从最低位开始传送;
  • 奇偶校验位,一般不用;
  • 停止位,一般为1位(也可以是1.5位或者2位),为高电平。作为结束的标志;
  • 波特率,波特率表示每秒钟传送的码元符号的个数,是衡量数据传送速率的指标。& @" p- v7 }3 r) I
如下图所示,为一帧串口数据的帧组成。
三、UART串口寄存器
STM32F103与串口相关的寄存器众多,这里只讲解重要的几个寄存器。
  • USART_SR:状态寄存器,如下图所示:
    & G9 b( C  V& E4 h
需要了解的位有:TXE:发送寄存器为空;TC:发送完成;RXNE:读取数据寄存器不为空;ORE:上溢错误;FE:帧错误;PE:奇偶校验错误。
  • USART_DR:该寄存器只有低8位有效,而且具有读写操作,有关该寄存器中的数据是要发送的数据还是接受到的数据取决于执行的操作是“读取”还是“写入”。 如下图所示:
    2 s. V/ O+ I0 @/ T
  • USART_BRR:波特率寄存器,用于设置串口通讯的波特率,如下图所示:; b- z  @# m* w6 L9 S7 v2 b
其中在寄存器中会设定相应的值,DIV_Mantissa[11:0]用来设定分频系数的整数部分,DIV_Fraction[3,0]用来设定分频系数的小数部分。
串口的波特率计算公式如下:
这里的fPCLKx(x=1、2)是给外设的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1,这里STM32F103CBT6没有的串口就不讲解)。USARTDIV是一个无符号的浮点数。假设串口波特率为115200,使用的是串口1,串口的时钟为PCLK2的时钟(即APB2总线的时钟)为72MHz,如下图所示。
根据公式可得:
USARTDIV=72000000/(115200*16)=39.0625
所以小数部分DIV_Fraction=0.0625*16=1=0x01。
整数部分DIV_Mantissa=39=0x27。

) `* @8 c" Z/ z1 }
  • 串口基础收发实验
    6 }6 F6 y( k* b( G+ M: }+ s0 r
串口收发实验使用STM32的串口1即UART1,通过串口模块连接电脑,使用串口调试助手来进行通信,STM32收到数据后把收到的数据在发回电脑。串口引脚如下图所示:
两个串口引脚分别与PA9与PA10引脚相连,那么我们就对PA9与PA10引脚以及串口模块进行配置,配置代码(通过调用官方库)。
代码编写的思路如下:
编程思路
1
管脚配置
1、定义结构体;
2、使能时钟;
3、填充结构体;
4、装载结构体。
2
串口配置
1、定义结构体;
2、使能时钟;
3、填充结构体;
4、装载结构体
5、开启中断;
6、使能串口。
3
中断优先级管理
1、定义结构体;
2、填充结构体;
3、装载结构体。
4
逻辑处理
等待接收以及发送数据
串口初始化代码如下:
串口中断函数代码如下:
设置串口1的波特率为115200,代码如下:
保存、编译、下载代码,把飞控上的USART1上接的视觉模块先拔下来,然后接上USB转串口模块,如下图所示:
然后在把USB转串模块插到电脑的USB口,打开电脑端的串口调试助手,找到对应的COM口(前提是安装了USB转串口驱动),设置波特率为115200,打开,在串口调试助手的输入框内输入“www.fengke.club”,点发送,然后可以看到串口调试助手收到来自STM32的回发信息,也是“www.fengke.club”,如下图所示。

* L( F! Q# m' y8 h

2.飞控开发基础-【3】串口(基础收发).pdf

1.03 MB, 下载次数: 1, 下载积分: 威望 -5

该用户从未签到

推荐
发表于 2021-4-1 15:02 | 只看该作者
是一种通用串行数据总线,用于异步通信

点评

你好,欢迎加入疯壳学习交流QQ群457586268  详情 回复 发表于 2021-4-1 15:07

该用户从未签到

3#
 楼主| 发表于 2021-4-1 15:07 | 只看该作者
zzz.dan 发表于 2021-4-1 15:02
8 Z3 a: {9 m; K6 |是一种通用串行数据总线,用于异步通信

- h$ b$ i5 @  b% Z你好,欢迎加入疯壳学习交流QQ群457586268* a& b9 d' |# A4 l' T
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-27 03:51 , Processed in 0.093750 second(s), 31 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表