历史上的今天

今天是:2024年10月13日(星期日)

正在发生

2021年10月13日 | 物联网之STM32开发三(USART串口)

发布者:数字狂想 来源: eefocus关键字:物联网  STM32  USART串口 手机看文章 扫描二维码
随时随地手机看文章

内容概要:

串行通信的基本概念


串口寄存器介绍


STM32实现串口数据的收发


HAL串口库函数的使用及printf的实现


串行通信的基本概念:


内容概要:


通信的基本概念


USART介绍


串口的电路连接


串口的通信协议


同步通信和异步通信:


通信,最少要有两个对象,一个收,一个发。


同步通信:一般情况下同步通信指的是通信双方根据同步信号进行通信的方式。比如通信双方有一个共同的时钟信号,大家根据时钟信号的变化进行通信。

异步通信:是指数据传输速度匹配依赖于通信双方有自己独立的系统时钟,大家约定好通信的速度。异步通信不需要同步信号,但是并不是说通信的过程不同布。

串行通信和并行通信的区别:


串行通信:指的是同一时刻只能收或发一个bit位信息。因此只用1根信号线即可。


并行通信:指的是同一时刻可以收或发多个bit位的信息,因此需要多根信号线才行。

                         -串行传输:数据按位顺序传输。                                                                  -并行传输:数据各个位同时传输。


                         -优点:占用引脚资源少                                                                                  -优点:速度快


                         -缺点:速度相对较慢                                                                                      -缺点:占用引脚资源多


单工、半双工、全双工:


单工:要么收,要么发,只能做接收设备或者发送设备。比如收音机  


半双工:可以收,可以发,但是不能同时收发, 比如对讲机  


全双工:可以在同一时刻既接收,又发送。 手机

常见通信总结:

USART基本概念:


通用同步异步收发器(USART)灵活地与外部设备进行全双工数据通信,满足外部设备对工业标准NRZ异步串行数据格式的要求。USART通过小数波特率发生器提供了多种波特率。它支持同步单向通信和半双工单线通信;还支持LIN(局域互联网络),智能卡协议与IrDA(红外数据协会)SIR ENDEC规范,以及调制解调操作(CTS/RTS)。而且,它还支持多处理器通信。


USART支持同步模式,因此USART 需要同步始终信号USART_CK(如STM32 单片机),通常情况同步信号很少使用,因此USART和一般单片机UART使用方式是一样的,都使用异步模式。


串口电路连接:

STM32f051串口:STM32F051内置多达两个通用同步 / 异步收发器( USART1 和 USART2 ),通信速度可达 6 Mbit / s

串口通信协议介绍:

波特率:


 在串行通信中,用“波特率”来描述数据的传输速率。所谓波特率,既每秒传送的二进制位数,其单位为bps(bits per second)。它是衡量串行数据速度快慢的重要指标。


国际上规定一个标准的波特率系列: 110、300、600、1200、1800、2400、4800、9600、115200、14.4Kbps、19.2Kbps、……


例如:115200bps、指每秒传送115200位。通信双方必须设置同样的同学速率才能正常通信


注意:实际的数据没这么多,还包括起始位,结束位,校验位


STM32 USART寄存器介绍

内容概要:


控制寄存器——USART_CR  


状态寄存器——USART_SR  


数据寄存器——USART_DR  


波特率寄存器——USART_BRR


串口寄存器-USART_CR1:

串口寄存器-USART_CR2:

                                                         

串口寄存器-USART_BRR:

串口寄存器-USART_ISR:

串口数据的发送和接收:

串口寄存器-USART_TDR:

串口寄存器-USART_RDR:

STM32实现串口数据的收发

内容概要:


串口硬件原理图


CubeMX中串口的配置


串口发送一个字符


串口接收一个字符


串口硬件原理图:

注意:如果无法识别串口,清装好ch340串口驱动


CubeMX中串口的配置:

串口数据的发送和接收:

串口发送一个字符:


void  Uart_Putchar(uint8_t ch)

{

while(!(USART1->ISR &(1<<7)));   //等待发送寄存器空

USART1->TDR = ch;       //发送字符

}

 

void Uart_Putstring(uint8_t  *str)

{

while(*str != '')

{

Uart_Putchar(*str);

str++;

}

}

串口接收一个字符:


uint8_t Uart_Getchar(void)

{

while(!(USART1->ISR & (1<<5)));  //等待收到一个字符的数据

return  USART1->RDR;    //返回收到的字符

}

HAL串口库函数的使用及printf的实现

HAL库中串口的收发函数:


Stm32f0xx_hal_uart.c  文件中

 

串口的发送函数

 

HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

 

串口的接收函数

 

HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

printf()实现串口重定向:


printf函数调用的是c库中的fputc函数。因此我们如果重新写了fputc函数,就可以改变printf函数的功能,可以向串口打印输出。

 

int fputc(int ch,FILE *f){

    while((USART1->ISR&(1<<7)) == 0);

    USART1->TDR=(uint8_t)ch;

    return ch;

}

关键字:物联网  STM32  USART串口 引用地址:物联网之STM32开发三(USART串口)

上一篇:利用STM32 的串口来发送和接收数据实验
下一篇:STM32中使用printf打印串口数据

推荐阅读

启动文件head.s源码:@******************************************************************************@ File:head.s@ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行@******************************************************************************         .text.global _start_start:                ...
湖南视比特机器人有限公司(以下简称“视比特”)近日宣布完成新一轮千万级战略融资,由同威资本领投,老股东道生资本跟投,毅仁资本继续担任本轮融资的财务顾问。此前,视比特在今年7月天使轮获得图灵资本、道生资本和小智创投的投资。 据了解,视比特于2018年8月入孵“柳枝行动”落地长沙国家高新区,是一家深度融合3D视觉感知与机器人柔性控制交互...
  本文无线充电系统的设计是用线圈耦合方式传递能量,使接收单元接收到足够的电能,以保证后续电路能量的供给。由于无线传电电压随能量发送单元和接收单元耦合线圈的间距D在测试中需要改变,而充电时间相对固定,便于控制,所以充电方式上选择固定电流充电的恒流充电方案。在器件选择上选择有多种省电模式,功耗特别省,抗干扰力特强的 MSP430系列超低功...
2020年以来,新冠肺炎疫情和“非接触式经济”推动了VR用户量及用户日活时长显著增长。进入2021年,“元宇宙”风口渐开,作为元宇宙接入设备的VR一体机成为巨头关注的“香饽饽”。今年以来,HTC、创维、惠普等品牌发布了VR一体机新品,8月字节跳动斥资数十亿收购VR硬件厂商Pico,苹果也被频传明年将推出VR一体机……VR一体机能否乘着元宇宙的风展翅高飞? ...

史海拾趣

问答坊 | AI 解惑

12530嵌入式ARM系统原理与实例开发

12530嵌入式ARM系统原理与实例开发(杨宗德)…

查看全部问答∨

解析红外摄像机日常使用下会产生的问题

红暴问题      有些厂家把能不能制造出无红暴红外灯当做一个技术问题来宣传,好像有红暴就是低技术,无红暴就是高技术.其实,有无红暴只是一个选择问题,并不是技术问题,波长超过700nm的光线叫做红外线,900nm以上的红外线基 ...…

查看全部问答∨

反激式驱动DCM与CCM如何判定

反激式驱动DCM与CCM如何判定 调试的都是反击式电源;调试的过程中;反激式驱动DCM与CCM如何判定? 是否可以从 分压电阻或者采样电阻来断定? 比如,原先分压下拉电阻改小,输出电压应该偏大的,但是改了之后没反应, 或者输出电压变化很小,是否 ...…

查看全部问答∨

FIR滤波后,点数变多,如何取点以计算RMS

假设采样点数为16,滤波系数个数为17, 故FIR数字滤波后,点数应为16+17-1=32个点, 请问我要计算该波形的有效值,应采用32个点其中的哪些点?具体有何依据?(有公式吗?) 具体波形可以看附件! …

查看全部问答∨

关于测试工程师

下星期要笔试一个测试工程师,与嵌入式有关的,但小弟没接触过,也不了解,哈哈,所以向各位大侠了解一下,它是什么东东,笔试大都考些什么? 职位描述: 1、 基于产品的软/硬件测试工程师; 2、 参与测试方案的制定、测试用例编写、测试任务执行 ...…

查看全部问答∨

wince 4.2和5.0区别

给位好,我想问大家一个问题就是wince4.2和5.0差别大吗?? 我现在想把一个5.0下的dll网卡驱动放到4.2的环境下面使用,不知道这样能否行得通??? 各位高手大侠请不吝赐教啊!!! 谢谢先…

查看全部问答∨

vxworks下的多播程序问题

#include \"sockLib.h\" #include \"iostream.h\" #include \"vxWorks.h\" #include \"inetLib.h\" #include \"taskLib.h\" #define MCastAddr \"234.5.6.7\" #define MaxLine 1024 void main() {         struct sockaddr_ ...…

查看全部问答∨

请问:摄像头,OV7670的分辨率如何设置?

手册上有HSTART,HSTOP,VSTART,VSTOP等寄存器有网友说: VGA模式是结束减去开始 QVGA模式是结束/2 减去开始/2  0X12地址设置QVGA还是VGA模式!!!有程序这样配置: {0x32, 0x80},//HREF //QVGA、RGB565模式240*320 {0x17, 0x16},//HSTART&nbs ...…

查看全部问答∨

嵌入式中的软字幕的实现(ARGB1555) freetype的应用

replyreload += \',\' + 1702232; 本帖最后由 37°男人 于 2014-6-26 14:10 编辑 很久没有写笔记了,整理一下资料和大家分享一下 (欢迎技术交流 xubbwd@gmail.com) 函数的实现功能为字幕(汉字/字母/数字)转换为ARGB1555来数据图像信息 ...…

查看全部问答∨

第三篇 MSP-EXP430F5529LP的通用GPIO操作

一、        通用I/O的简单操作参见MSP430X5XX datasheet.pdf 1.1   I/O的简介 特点: l  多种复用和设置(即可控制是否输入、是否输出、是否接上拉电阻、是否接下拉电阻、是否可接 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved