完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
串口:串口是一个重要的外部接口,在stm32上面也有丰富的串口资源,不过以我现在的水平还啥都不了解,所以这次主要说的就是通过USB串口和电脑通信
3.主要代码 #include "sys.h" #include "usart.h" #include "delay.h" #include "led.h" #include "key.h" int main(void) { u8 t; u8 len; u16 times=0; Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时函数初始化 uart_init(72,9600); //串口波特率初始化 LED_Init(); //初始化LED while(1) { if(USART_RX_STA&0x8000)//判断输入是否完成 { len=USART_RX_STA&0x3fff;//计算出数据长度 printf("rn您发送的消息为:rn"); for(t=0;t USART1->DR=USART_RX_BUF[t];//把输入的数据输入到到寄存器里面 while((USART1->SR&0X40)==0);//手动流出时间等待传输完成 } printf("rnrn");//换行 USART_RX_STA=0;//这次传输结束了,下一次已经准备好啦~ }else //数据还没有输入完毕 { times++; if(times%500==0) { printf("rn......loading......rn"); printf("rn出现了!出现了!rnrn"); } if(times%200==0)printf("请输入你想要的数据rn"); if(times%30==0)LED0=!LED0;//闪灯,证明你的程序还在进行中 delay_ms(10); } } } 重点代码理解 if(USART_RX_STA&0x8000):为什么这段代码可以判断数据有没有传输完毕呢,其实USART_RX_STA是一个定义好的十六位数:0000 0000 0000 0000 ,他的第十六位为0表示没接收完,等于1就是接收完毕,而0x8000转为2进制就是1000 0000 0000 0000,两者相与,只有两种结果,一个是0,一个是非0,所以就作为判断条件来使用了 len=USART_RX_STA&0x3fff 这段代码是计算出输入数据的长度的,USART-RX-STA里面已经储存了接收来的字节数,在与上可以接收的最大字节数,就得到了数据的长度。 if(USART1->SR&0X40)==0) 翻看手册我们可以知道USART1-SR的第6位掌管着判断发送是否完成,0x40=1000 000,与上它的意思就是看最后一位有没有变成1(有没有完成传输) USART_RX_STA=0; 清0,复原,重启 以上为本人粗略的理解,如有错误还请指出! |
|
|
|
只有小组成员才能发言,加入小组>>
3309 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9049 浏览 16 评论
4083 浏览 18 评论
1167浏览 3评论
601浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
592浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2329浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1892浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 22:31 , Processed in 1.006312 second(s), Total 80, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号