工程属性中的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个字节是不可能的,看看这个有没有帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)