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
暂无评论