STM32串口通信中使用printf和USART_SendData比较

1、printf和 USART_SendData稳定性都很高。
前者实现格式化字符,字符串比较有优势,后者传送单个字符和指令比较合适。
2、在复杂的串口通信协议实现中,建议printf()用作大文本及信息显示。
涉及自定义帧头+校验的通信时,用USART_SendData实现单字符及控制命令。
3、这两个占用代码量非常小,可以忽略,除非在FLASH严格的场合,目前ST的产品FLASH容量都足够大

 

1、如果用作调试和串口打印,建议使用printf,这是有标准C语言定义的库函数,其稳定性、兼容性和便利性都很高。 但是它归根究底是调用USART_SendData,因此效率会稍微低一点,且编译的文件会将标准库函数都编译进去(因为调用了标准库函数的头问价,编译时其编译依赖关系要求编译真个库文件)。
2、如果是串口传送文件,或者频繁做数传,建议直接USART_SendData,效率更高,或者封装成一个函数专门做个特性的发送/接受功能,效率更高,

### 回答1: USART_SendData函数可以用来发送单个字符或字节,如果要发送字符串,需要使用循环来逐个发送字符串中的每个字符或字节。以下是一个示例代码: ``` char str[] = "Hello, world!"; int len = strlen(str); for (int i = ; i < len; i++) { USART_SendData(USART1, str[i]); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } ``` 这个代码将字符串"Hello, world!"发送到USART1串口。首先计算字符串的长度,然后使用for循环逐个发送每个字符。在发送每个字符之后,使用while循环等待USART1串口发送完成标志位TXE被设置,表示数据已经被成功发送。 ### 回答2: USART(通用同步/异步收发器)是一种串行通信协议,它被广泛应用于各种嵌入式系统通信设备中,用于传输数据或命令。 在嵌入式系统中,我们需要通过UART(通用异步收发器)与其它设备进行通信。而USART是UART的升级版本,支持同步异步两种传输方式,具有更加稳定可靠的数据传输能力。 当我们需要在嵌入式系统中向其它设备发送字符串时,我们可以使用USART的数据发送函数USART_SendData()。该函数用来发送数据(包括字符、字符串数字等)到串口通信模块。 在USART_SendData()函数中,我们需要传入两个参数。第一个参数是USARTx,表示我们要使用哪个USART通信模块。第二个参数是data,表示需要发送的数据。 当我们需要发送字符串时,需要同时按照字符串的格式进行处理。在C语言中,字符串是由一系列字符组成的数组,并以'\0'结尾。因此,我们需要借助C语言中的字符串处理函数,将字符串转换为字符数组,并将其按照字符数组的形式发送到USART通信模块。 代码示例: #include <stdio.h> #include <string.h> /** * @brief USART数据发送函数 * @param USARTx:USART模块编号 * data:待发送数据 */ void USART_SendData(USART_TypeDef* USARTx, uint16_t data) { /* 等待发送缓冲区为空 */ while((USARTx->SR&0X40) == 0); USARTx->DR = (data & (uint16_t)0x01FF); } /** * @brief 发送字符串函数,通过循环调用USART_SendData()函数将字符数组的每个元素依次发送到USART通信模块 * @param USARTx:USART模块编号 * str:待发送字符串 */ void USART_SendString(USART_TypeDef* USARTx, char* str) { uint16_t i = 0; for(i = 0; i < strlen(str); i++) { USART_SendData(USARTx, (uint16_t)str[i]); /* 等待发送完毕 */ while((USARTx->SR&0X40) == 0); } } //将字符串"hello world"发送到USART1模块 USART_SendString(USART1, "hello world"); 此时,我们就可以通过USART1模块向其它设备发送字符串了。 ### 回答3: USART_SendData函数是STM32串口发送数据的函数之一。USART是指通用同步/异步收发传输器,它是一种同步异步两种传输模式都支持的总线,广泛应用于各种通信领域,包括单片机应用中。 USART_SendData函数的功能是通过USART对外发送数据。在STM32中,USART是由若干个外设寄存器组成,通过编程来实现串口数据的读写,其中USART_SendData函数用于将指定的数据通过USART的数据寄存器发送出去。 该函数的调用方式为: USART_SendData(USART_TypeDef* USARTx, u16 Data) 其中USARTx是指定的USART外设;Data是待发送的数据。 USART_SendData函数的调用过程如下: 1.检查发送缓冲区是否为空,如果不为空,等待缓冲区为空。 2.向USART的数据寄存器中写入数据。 3.等待数据发送完成。 4.返回发送数据的状态。 另外,通常采用中断方式触发发送过程,这样可以在数据传输过程中进行其他操作,通过配置相关的中断标志位来实现数据发送的可靠性稳定性。 在STM32的项目中,USART_SendData函数的具体应用场景可能比较多,可以用于串口调试、通信等多种领域。通过 USART_SendData发送字符串,可以使用循环将要发送的字符一个一个地放入USART数据缓冲区中,实现串口数据的发送。在发送完成后,如果想让命令提示符立刻刷新,可以通过发送回车符(0x0D)或换行符(0x0A)来实现。 综上所述,USART_SendData函数是STM32串口发送数据功能的重要函数之一,可以通过该函数将指定的数据通过USART外设传输出去,在实现STM32单片机与其他设备或系统之间的通信,以及各种串口调试等应用场景中得到广泛应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值