串口调试遇到的问题

1、STM32在使用printf时,需要函数重定向,切记要加一条:

while(USART_GetFlagStatus(USARTX, USART_FLAG_TXE) == RESET);

等待发送寄存器为空,否则可能会漏掉最后一个数据

//重定义fputc函数
int fputc(int ch,FILE *f)
{
	while((USART1->SR&0x40) == 0);
	USART1->DR = (u8)ch;
	while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
	return ch;
}

2、向函数中传递数组时候,数组大小是不能直接传递进来的,要增加一个数组长度n

char Data[]="12345678\r\n";

void SendData_char(char *p,u8 n)
{
	printf("n=%d\r\n",n);
	for(;n>0;n--)//sizeof,求字符串长度,带了'\0'
	{
		USART1->DR = (u8) (*p & 0xFF);
		while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
		p++;
	}
}

3、求数组大小应该注意:sizeof 和 strlen 的区别

首先使用strlen函数需要调用“#include <string.h>”头文件

char Data[]="12345678\r\n";

strlen(Data) 得到的数据是数组实际长度:10

sizeof(Data)得到的是整个数组的大小。

如果没有人为定义大小,则字符串长度默认就是数组大小(带结束标志符“\0”):11

版权声明:本文为CSDN博主「曹乐乐爱学习」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42212668/article/details/122375411

1、STM32在使用printf时,需要函数重定向,切记要加一条:

while(USART_GetFlagStatus(USARTX, USART_FLAG_TXE) == RESET);

等待发送寄存器为空,否则可能会漏掉最后一个数据

//重定义fputc函数
int fputc(int ch,FILE *f)
{
	while((USART1->SR&0x40) == 0);
	USART1->DR = (u8)ch;
	while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
	return ch;
}

2、向函数中传递数组时候,数组大小是不能直接传递进来的,要增加一个数组长度n

char Data[]="12345678\r\n";

void SendData_char(char *p,u8 n)
{
	printf("n=%d\r\n",n);
	for(;n>0;n--)//sizeof,求字符串长度,带了'\0'
	{
		USART1->DR = (u8) (*p & 0xFF);
		while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
		p++;
	}
}

3、求数组大小应该注意:sizeof 和 strlen 的区别

首先使用strlen函数需要调用“#include <string.h>”头文件

char Data[]="12345678\r\n";

strlen(Data) 得到的数据是数组实际长度:10

sizeof(Data)得到的是整个数组的大小。

如果没有人为定义大小,则字符串长度默认就是数组大小(带结束标志符“\0”):11

版权声明:本文为CSDN博主「曹乐乐爱学习」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42212668/article/details/122375411

生成海报
点赞 0

曹乐乐爱学习

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

HT66F2390/STM32——AM2320温湿度传感器

1、说明 AM2320 数字温湿度传感器采用单总线、标准 I²C 两种通信方式。本文主要基于HT66F2390单片机,采用单总线通讯,实现AM2320传感器数据获取。关于AM2320传感器的使用,可参

正点原子 例程学习记录 实验四 串口实验

断断续续地看了一阵子 ,一度被工程下无数的文件劝退,今又看了开发指南,发现其实没有编译的工程包含的文件并不多,绝大部分文件都是编译后才出现的。其中还有很多是系统文件,不需要自

基于51单片机《按键控制流水灯》

1.用4个LED灯发光二极管实现至少四种灯光效果 2.可以通过输入按键在几种灯光之间切换 3.可以通过暂停按键停止彩色灯光效果,使小灯全亮,再次按下按键后继续之前的效果 4.增加自动在几种效果间切换功能 原理图

STM32开发笔记04---配置系统时间

架构图 思考重点 本文的目的是使用HSE外部晶振来配置系统时钟参考手册中的时钟树如何理解理解开发版初始化过程中对系统时钟的操作如何自行变更系统时钟 配置时钟源 在开发版STM32F429,以HSE, HSI, PLL作为主要