历史上的今天
返回首页

历史上的今天

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

正在发生

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

2021-10-13 来源:eefocus

内容概要:

串行通信的基本概念


串口寄存器介绍


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;

}

推荐阅读

史海拾趣

明波通信(BWAVE)公司的发展小趣事

经过多年的发展,明波通信在技术和市场上都取得了显著成绩。为了进一步推动公司的发展,明波通信成功在新三版上市。这一举措不仅为公司筹集了更多的发展资金,也提升了公司的品牌影响力和市场竞争力。上市后的明波通信,在资本市场上展现出了强劲的发展势头。

Grande Electronics Ltd公司的发展小趣事
如果调制电路中的元件损坏或参数漂移,需要调整元件参数或更换新的元件。
Excel Cell Electronic Co Ltd公司的发展小趣事

为了拓展海外市场,ECE公司制定了国际化战略。公司积极参与国际电子展会,与国际知名企业建立合作关系,不断提升品牌知名度和国际影响力。同时,ECE公司在海外设立分支机构,加强与国际市场的联系和沟通,进一步拓展市场份额。这些努力使ECE公司的产品成功进入欧洲、北美等发达地区市场,实现了全球化布局。

FOX [Fox Electronics]公司的发展小趣事

进入21世纪后,Fox Electronics意识到全球化对于企业发展的重要性。为了更好地服务全球客户,公司开始在全球范围内布局生产基地和销售网络。通过在亚洲、欧洲和北美等地设立分厂和办事处,Fox Electronics不仅缩短了交货周期,还降低了生产成本,提高了市场竞争力。同时,公司还加强了与全球供应链伙伴的合作,通过优化供应链管理,确保产品质量和交货期的稳定性。

DBLECTRO公司的发展小趣事

进入21世纪后,随着全球对环保和可持续发展的关注度不断提高,迪贝电子也积极响应这一趋势,将环保和社会责任融入到企业的经营理念中。公司投入大量资金研发更加环保、节能的产品,并积极参与各种环保公益活动。同时,迪贝电子还积极推广绿色制造理念,通过优化生产流程、降低能耗和减少废弃物排放等措施,实现了企业的可持续发展。

Hi-Tron Semiconductor Corp公司的发展小趣事

2010年,迪贝电子面临了一次重大的市场挑战。随着国内外竞争对手的不断涌入,气体检测及分析仪器市场的竞争日益激烈。为了应对这一挑战,迪贝电子加大了技术创新的力度,积极引进国内外最新的技术和设备,不断提升产品的性能和品质。同时,公司还加强了与客户的沟通和合作,深入了解客户需求,提供个性化的解决方案。这些努力使得迪贝电子在激烈的市场竞争中保持了领先地位。

问答坊 | AI 解惑

DSP与普通MCU的区别

考虑一个数字信号处理的实例,比如有限冲击响应滤波器(FIR)。用数学语言来说,FIR滤波器是做一系列的点积。取一个输入量和一个序数向量,在系数和输入样本的滑动窗口间作乘法,然后将所有的乘积加起来,形成一个输出样本。   类似的运算在数字 ...…

查看全部问答>

ChinaEDA--嵌入式Linux操作系统学习规划

嵌入式Linux操作系统学习规划 ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定) (3) ...…

查看全部问答>

wince上如何根据hdc得到HWND? WindowFromDC函数无效

我把pc上的c++程序移植过来.遇到这个问题.…

查看全部问答>

PIC16F73单片机,需要晶振工作在HS模式,要在程序中设置吗?还是只要接上高速晶振就行了?

PIC16F73单片机,需要晶振工作在HS模式,要在程序中设置吗?还是只要接上高速晶振就行了?…

查看全部问答>

SignFile.exe的问题,按照ce help或者付林林上的文章说的执行失败!为什么?

如何!也就是windows ce系统加密的事宜。不经过签名的程序或者dll不能在设备生运行!…

查看全部问答>

看看这块强大的板子,C2000,Msp430,stellais arm 通吃

传说中30美金一块,满80美金还免邮费。   Universal Dev Board Accepts MSP430, C2000, or Stellaris MCU Chips   sample of a new development board arrived from SchmartBoard, a company that has created a cornucopia of bread ...…

查看全部问答>

keil 调试lm3s811程序出现错误

如图所示。 我是在调试lm3s811程序的时候, 程序复位一下 就出现这样的对话框了。多次出现,但是没有规律。 有谁有见过类似的情况,求解~~…

查看全部问答>

请问TI-6416如何用指令读取CPU的运行时钟数?谢谢各位大侠:)

请问TI-6416如何用指令读取CPU的运行时钟数呢? 我想让DSP读取下一个接口命令前等待一段时间,小弟急着用,那位大侠帮助下,谢谢…

查看全部问答>

TI中国大学---2012年德州仪器中国教育者会议

会议通知 TI中国大学计划各合作实验室老师, 你们好! 德州仪器公司大学计划部拟定于2012年11月7日至11月11日在山东济南举办“2012年德州仪器中国教育者会议”,特此我们诚挚邀请您参加,本次活动初步安排如下: 时间:2012 年 11月7日 - 2012年 ...…

查看全部问答>

[应用笔记]利用数字电位计AD5292、运算放大器OP184和MOSFET构建具有 提升输出电流...

利用数字电位计AD5292、运算放大器OP184和MOSFET构建具有 提升输出电流的可编程高压源 电路功能与优势 图1所示电路采用数字电位计AD5292和运算放大器 OP184,提供一种具有提升输出电流的低成本、可编程高 压源。BSS138 PMOS晶体管和Si2307C ...…

查看全部问答>