初级会员

- 积分
- 60
- 金钱
- 60
- 注册时间
- 2019-8-19
- 在线时间
- 11 小时
|
2金钱
以下是我的main函数 用原子哥的串口例程小改的
#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "beep.h"
#include "key.h"
unsigned char str[]="tomorrow";
int main(void)
{
u8 t,k,a;
u8 len;
u16 times=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //延时初始化
uart_init(115200); //串口初始化波特率为115200
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
//打印我输入的内容
printf("\r\n您发送的消息为:\r\n");
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]); //向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
//打印我自定义字符串的前两位
printf("\r\n\r\n");//插入换行
printf("%c%c",str[0],str[1]);
printf("\r\n\r\n");//插入换行
//打印我自定义字符串的全部
for(k=0;k<sizeof(str);k++)
{
printf("%c",str[k]);
}
printf("\r\n\r\n");//插入换行
USART_RX_STA=0;
}
else
{
times++;
if(times%200==0)printf("请输入数据,以回车键结束\r\n");
if(times%30==0)LED0=!LED0;//闪烁LED,提示系统正在运行.
delay_ms(10);
}
}
}

这是我串口助手的图 发送tomorrow 第一个为返回我发送的 第二行为我的STR数组的前两位 第三行为我的整个STR数组 为什么前两位缺少了???? 我如果把打印STR数组放到while(1)里面和上面是正常的,唯独放到判断接受这里就不行了 什么情况啊
|
|