stm32 串口通讯,我把程序中有关printf重定向有关的函数屏蔽,单片机就接收不到数据了?

stm32 串口通讯,我把程序中有关printf重定向有关的函数屏蔽,单片机就接收不到数据了?,第1张

工程属性中的Target项中的Code Generation 选择 UseMicroLIB。 即可使用printf进行串口输出。

库函数版本的:

如果使用的是MDK,请在工程属性的“Target“-》”CodeGeneration“中勾选”Use MicroLIB“ 进行如上设置后编译一下,串口输出正确的数据。

函数库中没有统计字符个数哦,只有长度strlen。需要个数统计的话自定义写一个就行了

#include <stringh>

#include <stdioh>

int main()

{

int i,length=0,daxie=0,xiaoxie=0,kongge=0,shuzi=0,qita=0;

char arr[30];

gets(arr);

length = strlen(arr);

//printf("%d\n",length);

//printf("%s\n",arr);

for(i=0; i<length; i++)

{

if(arr[i]==32)//空格判断

kongge++;

else

{

if(64<arr[i]&&arr[i]<91)//大写判断

daxie++;

else

{

if(96<arr[i]&&arr[i]<123)//小写判断

xiaoxie++;

else if(47<arr[i]&&arr[i]<58)//数字判断

shuzi++;

else

qita++;

}

}

}

printf("大写个数:%d\n",daxie);

printf("小写个数:%d\n",xiaoxie);

printf("数字个数:%d\n",shuzi);

printf("空格个数:%d\n",kongge);

printf("其他个数:%d\n",qita);

return 0;

}

顺序写反了,应该先等待接收区非空,再接收,然后再发送,按照当前的代码,你发送的不一定是接收到的数据。

按照如下顺序修改:

while(USART_FLAG_RXNE == RESET)

USART_ReceiveData()

USART_SendData()

没有具体地看,但是你说9600波特率,一个字节是100us就不对了,9600波特率是指位速,8位才一个字节,再加上起始位和停止位,那就是10位,所以一个字节需要整整1ms的时间,所以1ms读2个字节是不可能的,看看这个有没有帮助。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12175904.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存