基于正点原子stm32mini板的串行通信原理
本篇文章将讲述正点原子stm32mini板的串行通信原理,小白总结,如有错误,请大神指教。
目录
一、通信双方的两种通信方式
二、STM32的串口通信接口
三、硬件连接
四、STM32UART异步通信方式特点:
五、STM32串口异步通信需要定义的参数:
六、STM32串口寄存器库函数配置
一、通信双方的两种通信方式
(1)并行通信
传输原理:数据各个位同时传输
优点:速度快
缺点:占用引脚资源多
(2)串行通信
传输原理:数据按位顺序传输
优点:占用引脚资源较少
缺点:速度相对较慢
(3)串行通信分类:
<1>单工通信:数据传输只支持数据在一个方向上传输。
<2>半双工通信:允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。
<3>全双工通信:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式结合,它要求发送设备和接收设备都有独立的接收和发送能力。
串行通信的三种传送方式:
(4)串行通信的通信方式
<1>同步通信:带时钟同步信号传输——SPI,IIC通信接口
<2>异步通信:不带时钟同步信号——UART(通用异步收发器),单总线
二、STM32的串口通信接口
UART:通用异步收发器
USART:通用同异步收发器
三、硬件连接
串口的连接要RX连接TX,TX连接RX。
四、STM32UART异步通信方式特点:
(1)全双工异步通信。
(2)分数波特率发生器系统,提供精准的波特率——发送和接受共用的可编程波特率,最高可达4.5Mbits/s。
(3)可编程的数据字长度(8位或者9位)。
(4)可配置的停止位(支持1或者2位停止位)。
(5)可配置的使用DMA多缓冲器通信。
(6)单独的发送器和接收器使能位。
(7)检测标志:①接收缓冲器②发送缓冲器空③传输结束标志
(8)多个带标志的中断源,触发中断。
(9)其他:校验控制,四个错误检测标志。
五、STM32串口异步通信需要定义的参数:
①起始位②数据位(8位或9位)③奇偶校验位(第9位)④停止位(1,15,2位)⑤波特率设置
六、STM32串口寄存器库函数配置
(1)常用的串口相关寄存器:USART_SR状态寄存器、USART_DR数据寄存器、USART_BRR波特率寄存器。
(2)波特率计算方法
可以使用这个公式来计算波特率
(3)串口操作相关库函数(省略入口参数):
void USART_Init();//串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断
void USART_SendData();发送数据到串口,DR
uint16_t USART_ReceiveData();//接收数据,从DR读取接收到的数据
FlagStatus USART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatus USART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断状态标志位
(4)串口配置的一般步骤(一般这些函数工程模板里有,这块写出来只是熟悉一下函数的功能)
①串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
②串口复位:USART_DeInit();//这一步不是必须的
③GPIO端口模式设置:GPIO_Init();模式设置为GPIO_Mode_AF_PP
④串口参数初始化:USART_Init();
⑤开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
⑥使能串口:USART_Cmd();
⑦编写中断处理函数:USARTx_IRQHandle();
⑧串口传输状态获取:FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx,uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TypeDef* USARTx,uint16_t USART_IT);
七、串口通信实验代码
main.c里
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "stdio.h"
//ALIENTEK Mini STM32¿ª·¢°å·¶Àý´úÂë3
//´®¿ÚʵÑé
//¼¼ÊõÖ§³Ö£ºwww.openedv.com
//¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾int main(void)
{ u8 t;u8 len; u16 times=0; Stm32_Clock_Init(9); //ϵͳʱÖÓÉèÖÃdelay_init(72); //ÑÓʱ³õʼ»¯ uart_init(72,9600); //´®¿Ú³õʼ»¯Îª9600LED_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++){USART1->DR=USART_RX_BUF[t];while((USART1->SR&0X40)==0);//µÈ´ý·¢ËͽáÊø}printf("\r\n\r\n");//²åÈë»»ÐÐUSART_RX_STA=0;}else{times++;if(times%5000==0){printf("\r\nALIENTEK MiniSTM32¿ª·¢°å ´®¿ÚʵÑé\r\n");printf("ÕýµãÔ×Ó@ALIENTEK\r\n\r\n\r\n");}if(times%200==0)printf("ÇëÊäÈëÊý¾Ý,ÒԻسµ¼ü½áÊø\r\n"); if(times%30==0)LED0=!LED0;//ÉÁ˸LED,ÌáʾϵͳÕýÔÚÔËÐÐ.delay_ms(10); }}
}
然后剩下的就和模板一模一样就好。
基于正点原子stm32mini板的串行通信原理相关推荐
- stm32 读取sd卡图片显示_「正点原子STM32Mini板资料连载」第三十五章 汉字显示实验...
1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第三十五章 汉字显示实验 汉字显示在 ...
- 1709 ltsb 内存占用_「正点原子STM32Mini板资料连载」第三十二章 内存管理实验
1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第三十二章 内存管理实验 上一章,我 ...
- stm32 工业按键检测_「正点原子STM32Mini板资料连载」第七章 按键输入实验
1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 按键输入实验 上一章,我们介 ...
- stm32l0的停止模式怎么唤醒_「正点原子STM32Mini板资料连载」第十九章 待机唤醒实验...
1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第十九章 待机唤醒实验 本章我们将向 ...
- TM1638快速开发教程(基于正点原子mini板stm32f103rc)
参加电赛,指导老师给了块TM1638模块,商家给的是C51驱动代码,改写成32驱动代码. tm1638.h文件 #ifndef __TM1638_H #define __TM1638_H#define ...
- 基于正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)的个人自学记录
基于正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)的个人自学记录 硬件环境 正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2) 底板+核 ...
- stm32f407 6路串口dma如何配置_stm32cubeMX学习十、扫码模块程序开发(基于正点原子STM32F407开发板)...
本程序编写基于正点原子STM32F407开发板. 本文使用的扫码模块是下面这个品牌. 扫码模块的应用场景非常广泛,我们可以上百度搜索一下: 等等. 今天就来说说如何在开发板上实现控制它吧,打开数据手册 ...
- STM32下载程序至SRAM——基于正点原子精英STM32F103ZET6开发板
STM32下载程序至SRAM--基于正点原子精英STM32F103ZET6开发板 如题,由于STM32的FLASH烧写寿命在1万次左右,对于本人这样的改一行代码都想下载到开发板中测试的强迫症患者,真是 ...
- 基于正点原子STM32F103精英板IIC实验的MS5611气压计的使用
MS5611是一款气压计,能够提供高精度的气压值与温度值,这次做项目正好需要用到这款传感器,包括之前也没好好学习用过IIC,所以写下博客记录一下. 如果有需要使用的朋友可以去https://downl ...
- 基于正点原子F103精英板和CubeIDE的Hal库LCD驱动移植(从零开始)
最近在学习王维波老师的<STM32Cube高效开发教程>,王老师移植的是普中科技的驱动,而我手动移植了一下正点原子的lcd驱动,看了网上的诸多教程,有的博客存在一些bug,于是乎手动整理了 ...
最新文章
- 加性注意力机制、训练推理效率优于其他Transformer变体,这个Fastformer的确够快...
- python中pos()_python中不带NLTK的POS标记器
- 仿照微信的效果,实现了一个支持多选、选原图和视频的图片选择器,适配了iOS6-10系统,3行代码即可集成....
- Java 8类型注释
- 2017-2018-1 Java演绎法 第三周 作业
- 不是程序员看不懂的21个梗,当你改错一行代码的时候...
- 发展前景好的互联网技术方面,你觉得比较适合女孩子的都有哪些啊?
- [iOS] 使用 blockable NSTimer 避免内存泄漏
- RHEL6解决无法使用YUM源问题
- perl语言中数组初始化为空和undef的不同
- labview技巧——自定义 5位数码管字体 显示控件
- Windows中的ping命令
- 三种call解释(一): cdcall stdcall naked call等在hook时,保持堆栈平衡
- 鸿蒙系统怎么在桌面添加小程序,从微信小程序到鸿蒙JS开发-menutoastdialog
- 机房合作—SVN skipped remains conflicted
- 年轻代和老年代垃圾回收
- WIN32 opengl环境搭建
- 使用pycharm搭建数据库模型
- [欧美音乐]Tamas Wells -《A Plea en Vendredi》[MP3+FLAC]
- 期刊评价标准JCR,IF,SJR以及如何查询期刊等级