问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

stm32can通信和串口的区别

发布网友 发布时间:2022-03-24 10:32

我来回答

2个回答

热心网友 时间:2022-03-24 12:02

一、简介
STM32F103ZET6有3个USART(通用同步和异步收发器) + 2个UART(通用异步收发器)
分别是USART1,USART2,USART3
和UART4,UART5

二、USART和UART有什么区别呢?
当进行异步通信时,这两者是没有区别的。区别在于USART比UART多了同步通信功能,同步通信需要STM32提供时钟来同步的,
这个同步通信功能可以把USART当做SPI来用,比如用USART来驱动SPI设备。同步通信的连接示例图:

其中RX,TX,SCLK引脚的定义,在数据手册上都可以找到:百为stm32开发板光盘\芯片数据手册\数据手册STM32F103xC STM32F103xD STM32F103xE.pdf

这个区别在初学STM32的时候我们不需要去深入研究,只要知道USART有很多功能,除了全双工异步通信之外,还包括支持同步通信和单线半双工通信,支持LIN(局部互连网),智能卡协议和IrDA红外通信,以及调制解调器(CTS/RTS)等操作。

三、数据通信格式
我们用得最多的是全双工异步通信功能,下面我们来研究下怎么通过串口1(USART1)来收发信息,和printf功能的实现。

通常串口通信的数据格式如下图:

我们需要设置的数据有通信速率,数据字长,奇偶检验位,停止位。一个典型的设置是115200波特率,8位数据,无奇偶校验,1位停止位。
这个设置在固件函数库里面,我们是通过设置USART_InitStructure结构体,然后调用USART_Init函数来实现的:

USART_InitStructure.USART_BaudRate = 115200; //设置通信波特率为115200
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //设置通信数据格式为8位数据
USART_InitStructure.USART_StopBits = USART_StopBits_1; //设置停止位为1位
USART_InitStructure.USART_Parity = USART_Parity_No ; //设置为无奇偶校验
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //设置为无硬件流控制,即无CTS/RTS控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //设置发送使能,接收使能

USART_Init(USART1, &USART_InitStructure); //调用USART_Init,把上面的参数分别设置进USART的控制寄存器USART1->CR1,USART1->CR2,USART1->CR3

USART_Cmd(USART1, ENABLE); //使能串口

大家发现,在2.0固件库的USART例程里并没有看到USART1,因为是它用USARTx宏代替的,
其中USARTx是platform_config.h里定义的,大概是这个样子:
#ifdef USE_USART1
#define USARTx USART1
#define GPIOx GPIOA
#define RCC_APB2Periph_GPIOx RCC_APB2Periph_GPIOA
#define GPIO_RxPin GPIO_Pin_10
#define GPIO_TxPin GPIO_Pin_9
#endif

只有定义了USE_USART1,上面的#ifdef USE_USART1和#endif之间的内容才会被编译,所以在platform_config.h里也需要定义USE_USART1:
#define USE_USART1

这里GPIO_Pin_9是串口1的发送引脚,GPIO_Pin_10是串口1的接收引脚,也可以从百为STM32开发板的电路图上看出来:

四、串口引脚配置
上面USART_Init函数配置了USART1的数据通信格式,但串口能工作的前提是需要配置相应的TX,RX的引脚,这个是通过GPIO_Configuration函数来配置的:
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //打开USART1时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //打开AFIO时钟
/* 配置 USARTx_Tx 为复用推挽输出 */
GPIO_InitStructure.GPIO_Pin = GPIO_TxPin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOx, &GPIO_InitStructure);
/* 配置 USARTx_Rx 为输入悬空 */
GPIO_InitStructure.GPIO_Pin = GPIO_RxPin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOx, &GPIO_InitStructure);
}

五、收发数据
配置好USART1使用的引脚,数据通信格式,下面就可以收发数据了,
USART_GetFlagStatus函数可以读取收发状态等,读取状态标志可以是以下几个:

发送数据示例:
USART_SendData(USART1, 'a'); //发送一个字符a

接收数据示例:
u16 RxData;
RxData = USART_ReceiveData(USART1); //从USART1接收数据到RxData变量

下面是串口通信printf程序里的主要功能,上电打印一串信息,把接收到的数据回显到PC上:
/* 用printf打印一串信息到PC的超级终端或串口调试软件上 */
printf("\n\rUSART Printf Example: retarget the C library printf function to the USART\n\r");
while (1)
{
if(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET) //判断是否有数据要接收
{
i = USART_ReceiveData(USARTx); //接收数据
printf("%c\n\r",i&0xff); //回显到PC的超级终端或串口调试软件上
}
}

六、printf的实现
上面的printf是怎么实现的呢,这个是C标准库里定义的函数,我们是怎样把它的输出重定向到串口的呢?

我们知道printf是调用fputc函数来打印的,所以我们只要把fputc函数重定义就可以了:
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

PUTCHAR_PROTOTYPE
{
/* 调用USARTx发送一个字符*/
USART_SendData(USARTx, (u8) ch);
/* 等待发送完成 */
while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET)
{
}
return ch;
}

另外还要加上头文件
#include "stdio.h"

还要注意的是,在工程里要勾上USE MicroLIB

热心网友 时间:2022-03-24 13:20

关注这个问题
stm32can通信和串口的区别

当进行异步通信时,这两者是没有区别的。区别在于USART比UART多了同步通信功能,同步通信需要STM32提供时钟来同步的,这个同步通信功能可以把USART当做SPI来用,比如用USART来驱动SPI设备。同步通信的连接示例图:其中RX,TX,SCLK引脚的定义,在数据手册上都可以找到:百为stm32开发板光盘\芯片数据手册\数据...

串口服务器通信选哪家?

串口服务器通信迪凯特家好,迪凯特科技(北京)有限公司是一家长期专力于串口通讯、物联网终端数据传输设备的科技公司,主推产品DIGATTO T系列串口服务器、SUNIX系列多串口卡、物联设备 I.O.T数据传输设备,以质量好、性能优,受到广大用户的好...

stm32与CAN总线是什么关系啊?? 求高手指教啊! CAN是芯片吗?要具体点的...

stm32是一块单片机,就是一块控制芯片。CAN总线是一种通讯协议,就像咱们的串口,是用于器件之间通讯用的。就像咱们的串口需要一块MAX232芯片作逻辑转换一样,CAN也需要一块专门的CAN芯片支持。单片机普通IO脚接CAN芯片,单片机发出通讯信号给CAN芯片作逻辑转换后,CAN芯片将信号放到CAN总线上去传输,信号到...

如何处理stm32 can 错误

说得简单点就是象串口一样,当二个串口互相对发数据的时候,接收和发送的过程就可能出现互相干扰的情况,只是这种情况下只要调整下,互相干扰的情况会改善或者消失,但是CAN这样发送的时候就会出现错误,这种错误需要处理,不处理的话就可能出现离线情况(这时接收和发送都无效),如果采用硬件自动处理的话,...

STM32-串口通信详解

串口通信分为单工、半双工和全双工三种模式。单工只允许单方向数据传输,半双工则允许双向通信但有方向切换,全双工则是两方向同时进行,需要独立的发送和接收功能。理解这些模式有助于我们区分它们的工作方式。STM32的串口通信基于USART模块,包括异步和同步通信模式。数据在发送前需格式化并加码,确保接收方...

stm32串口收发口不一样吗

不一样。STM32共有两种串口通信接口,分别是:UART通用异步收发器,USART:通用同步异步收发器对于大容量的STM32F10x系列芯片,包含3各USART和2个UART。

stm32能实现RS232串口通信吗

stm32的任何型号板子都可以实现串口通信;例如stm32f103zet6,由3个同步异步串口,和2个异步串口,不同型号的串口数量可能不同,但至少有2.3个串口。串口通信和RS232串口通信是有区别的。很多人把rs232通信和串口划等号其实是不对的。两者的通信方式是相同,但电压不同。单片机直接输出、输入的串口信号...

UART和USART:在STM32上选择最适合你的串口通信方式

在STM32微控制器上,串口通信的选择主要围绕UART和USART两种方式。决定哪个更适合你,关键在于你的应用场景和需求。本文将深入探讨它们的区别,以及如何在STM32上做出明智选择。UART,作为异步串口通信方式,主要适用于简单的设备间通讯,不支持同步模式,成本低、复杂度小,适用于基础通信。而USART则更为全面...

stm32 用usb和串口哪个好

usb比串口先进,更适应未来应用。串口在未来的设备上会显得笨重。usb协议栈相当复杂,即使使用第三方厂商提供成熟方案,其开发也是相当费事。串口协议要简单许多。所以如果是设计系统级的数据传输方案,特别是你的设备体现出某种标准设备的类型特征(比如大容量存储装置,显示器,鼠标,。。。)的时候,应该...

ustm32usb和串口dma哪个快

ustm32usb快。ustm32usb设备都是全速设备,即1.5MB/s,STM32系列基本都支持全速以上的USB接口(有USB模块的STM32芯片),所以速度上比串口dam快。DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。

stm32上的can总线怎么会有rx和tx

STM32上的TX RX后端是需要接CAN收发器的,STM32与CAN收发器之间是通过TX RX 的TLL电路实现传输,收发器与CAN线端是CANH 和CANL之间的差分电压实现数据传输的。

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
为什么总是腰疼 我妈妈74岁突然腰疼,去医院DR检查说是腰椎第一节、第四节变匾,医生 我的腰椎比常人多一节。颈椎反弓。现在无论是久站还是久坐…甚至躺在... 做梦梦到和异性躺在被窝里是什么预兆 红烧茄子有哪些特别简单的做法? 为什么我会梦到我的亲人死了? 梦见猫变老虎咬我手 在哪里看快手直播? appleid登录不上去是怎么回事? 我昨晚做梦梦见我找一个房间地方解手,然后一个陌生男的主动跟我接吻,这... stm32板的usart2设置与usart1有什么区别啊 UART和串口到底有什么区别? 请问MSP430的usart分软件usart和硬件usart,这两种形式在使用中有什么区别吗? USARTs UARTs 有什么区别? usart和uart电平信号 stm32 f405 uart 和usart 的区别 UART与USART有区别么? USART与UART有什么区别? USB3.1究竟比USB3.0接口快多少 usb3.0接口能接3.1吗 usb3.0和usb3.1的区别 usb3.0和3.1差别大吗?有什么区别? USB3.1 Gen1是USB3.0,Gen2才是真3.1吗,和雷电口有什么不同? USB3.1和USB3.0有什么区别,有接口图片吗?接口区别 usb3.1可以用3.0接口吗 usb3.1接口和3.0的区别 usb3.1和3.0的区别,usb3.1有什么优点 usb3.0与usb3.1通用吗?与usb2.0呢? usb3.0和usb3.1接口的区别 U盘的3.0和3.1接口有什么不同 USART_ClearFlag和USART_ClearITPendingBit区别 stm32f103zet6的UART5使用DMA的问题 SCI 和 UART是什么关系?接口和协议的差别? UART包括什么? USB与USART有什么不同 UART,串口,RS232,RS485等等,之间有什么联系和区别? UART是什么? 请问uart和ttl有什么区别? 怎么识别uart和ttl区别 都是有VCC RX TX GND 分别说明USART在发送期间和接收期间有几种中断事件 什么是USART中的停止位 做cc2530 串口uart0发送字符串时候为什么串口助手中什么也没有 拼多多买完东西老推荐怎么去除? 拼多多怎么清除根据喜好推荐? 拼多多这个精选推荐怎么关闭? 拼多多精选推荐怎么关 拼多多里的关注里推荐店铺怎么删除? 拼多多推广怎么关闭智能推广 拼多多行家帮你选动态怎么关闭 拼多多果园怎么样关闭同城推荐答题拼多多怎样关闭同城推荐? 拼多多精选推荐点击了不想看多久能解除 为什么拼多多老是给我推荐一些女性私密衣物,我是男的,看到后就会那啥了,怎么关闭这些推荐?
  • 焦点

最新推荐

猜你喜欢

热门推荐