这C语言学的太烂了,到现在才知道printf怎么用。
--------------------------------------------------------------------------------
if(USART_RX_STA & 0X8000) //接接收完成
{
printf("USART_RX_STA = %#x\n",USART_RX_STA); //输出USART_RX_STA内容
len = USART_RX_STA &0x3fff;
USART_RX_STA = 0; //重置等待下次接收
printf("USART_RX_BUFF = %s\n",USART_RX_BUF); //输出USART_RX_BUF内容
printf("接收到%*s\n",len,USART_RX_BUF); //指定长度输出USART_RX_BUF
printf("Len = %0*d\n",tmp,len); //接收到的字符长度 tmp = 4;
}
--------------------------------------------------------------------------------
刚开始学STM32,下午测试 战舰源码 system文件夹下提供的usart接收ISR,以及printf输出功能。
使用战舰提供的串口助手,虚拟串口和MDK软件调试
很简单的几句,本意是想将 USART_RX_STA的状态,接收的字符,缓冲区内容 再发出来
测试时发生了一些事:
1 我输入123456,没有按回车,没有任何回应,这是正确的,因为 串口接收ISR 将回车符作为结束符
2 再发送一次带上回车的123456,有了回应,没有问题。
再发送一次之后,问题出现了,
这句
printf("接收到%*s\n",len,USART_RX_BUF); //指定长度输出USART_RX_BUF
这句输出不是我想要的了,因为这时 BUFF中的内容是这样的 123456123456,而我的想法是指定输出宽度为上次接收到的字符宽度,即预想输出为123456
明显错了。
不得已,去查了printf函数。发现改成这样才对。
printf("接收到%.*s\n",len,USART_RX_BUF); //指定长度输出USART_RX_BUF
学C语言也很久了,printf函数可以说是最早接触到的函数,可是,万万没想到在这翻船,
发个帖子纪念下,提醒下自己,也提醒下朋友们,很多东西,自己真的是一知半解,搞好基础是多么的重要啊!
|