完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 北洋水师 于 2015-12-6 09:43 编辑
作为电子发烧友论坛的版主,特别是STM32板块的版主,帖子己停更俩月有余,本人在此做出深深地抱歉,其中包括电子发烧友论坛的工作人员,以及部分关注我的STM32学习者. 最近在搞串口,因为机智云的wifi模块也就是汉枫的LPB100也是通过串口来和单片机进行通讯的,所以,掌握串口很必要 大家所熟知的 是STM32的串口1,也就是USART1,对于串口1,由于用处比较多,例程比较多,此处既然提到了例程,就多说几句,我以前是只要程序能工作,我是不会去深究例程的来源和原理的,但是,最近的一个程序,需要我去整合STM32的串口1,2,,3,4,5 反正就是搞定串口,一开始我是觉得没什么的,尤其是在手头有原子例程(库版本)的前提下,相信大多数学习者会和我一样,认为直接修改一下I/O口即可...但是,实时证明,我和大家都是错的,而且错的离谱...下面,我将带大家浅层次认识一下STM32的串口 对于大容量STM32芯片,具有5个串口,其中1,2,3是USART,手册上谓之同步/异步串行通信,而4,5则谓之UART,异步串行通信.这意味着它们有着本质的区别,在这里在啰嗦一下,STM32虽然有很多串口,但是只有串口1可以被用于烧写程序. 然后,我就投身轰轰烈烈的程序测试中了...先是串口2,也就是USART2,和串口1类似,只要注意I/O口的模式(复用,映射一定要搞清楚!),基本问题不大,然后是串口3,在调试串口3 的过程中,发现始终不能正常收发数据,就连最简单的 0xXX 也发不出去,于是我去查找了各种资料,我找到了原子的寄存器版例程,然后把它改写成库版本,在这个过程中我得知了很重要的一个结论---库版本有很多寄存器位是操作不到的! 发现库版本的话,程序最后必须添加这一句USART_ClearFlag(USART3,USART_FLAG_TXE); 具体原因,还不是很清楚,希望大家一起研究研究. 串口的发送用的是库版本自带的 USART_SendData 函数.而接收数据是照搬原子例程,用串口中断,监测接收标志位来完成的. 接下来就是串口 4, 5,这两个串口有很多寄存器位和串口1,2,3有出入,所以用库函数操作是会出错的...暂时用寄存器版初始化函数...而接收同样是用串口中断完成的. 另外,无意中发现,当单片机和电脑建立通信之后,在正常发送数据的时候,快速点击"打开/关闭串口"按钮,电脑的串口助手就会接收到意想不到,毫无规律的串口数据...暂时就说这些吧,希望大家继续关注,谢谢大家 附上本人联系方式:QQ:1293345286 星空
|
|
相关推荐
4 个讨论
|
|
只有小组成员才能发言,加入小组>>
191个成员聚集在这个小组
加入小组【机智云转接板ML302-GC211试用体验】 第1章 机智云平台快速入门
8919 浏览 0 评论
3689 浏览 0 评论
【教程分享】Arduino uno R3接入机智云,快速实现物联网开发
7345 浏览 0 评论
4117 浏览 6 评论
1787 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 20:39 , Processed in 0.721828 second(s), Total 60, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号