本篇文章将讲述正点原子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板的串行通信原理相关推荐

  1. stm32 读取sd卡图片显示_「正点原子STM32Mini板资料连载」第三十五章 汉字显示实验...

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第三十五章 汉字显示实验 汉字显示在 ...

  2. 1709 ltsb 内存占用_「正点原子STM32Mini板资料连载」第三十二章 内存管理实验

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第三十二章 内存管理实验 上一章,我 ...

  3. stm32 工业按键检测_「正点原子STM32Mini板资料连载」第七章 按键输入实验

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 按键输入实验 上一章,我们介 ...

  4. stm32l0的停止模式怎么唤醒_「正点原子STM32Mini板资料连载」第十九章 待机唤醒实验...

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第十九章 待机唤醒实验 本章我们将向 ...

  5. TM1638快速开发教程(基于正点原子mini板stm32f103rc)

    参加电赛,指导老师给了块TM1638模块,商家给的是C51驱动代码,改写成32驱动代码. tm1638.h文件 #ifndef __TM1638_H #define __TM1638_H#define ...

  6. 基于正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)的个人自学记录

    基于正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)的个人自学记录 硬件环境 正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2) 底板+核 ...

  7. stm32f407 6路串口dma如何配置_stm32cubeMX学习十、扫码模块程序开发(基于正点原子STM32F407开发板)...

    本程序编写基于正点原子STM32F407开发板. 本文使用的扫码模块是下面这个品牌. 扫码模块的应用场景非常广泛,我们可以上百度搜索一下: 等等. 今天就来说说如何在开发板上实现控制它吧,打开数据手册 ...

  8. STM32下载程序至SRAM——基于正点原子精英STM32F103ZET6开发板

    STM32下载程序至SRAM--基于正点原子精英STM32F103ZET6开发板 如题,由于STM32的FLASH烧写寿命在1万次左右,对于本人这样的改一行代码都想下载到开发板中测试的强迫症患者,真是 ...

  9. 基于正点原子STM32F103精英板IIC实验的MS5611气压计的使用

    MS5611是一款气压计,能够提供高精度的气压值与温度值,这次做项目正好需要用到这款传感器,包括之前也没好好学习用过IIC,所以写下博客记录一下. 如果有需要使用的朋友可以去https://downl ...

  10. 基于正点原子F103精英板和CubeIDE的Hal库LCD驱动移植(从零开始)

    最近在学习王维波老师的<STM32Cube高效开发教程>,王老师移植的是普中科技的驱动,而我手动移植了一下正点原子的lcd驱动,看了网上的诸多教程,有的博客存在一些bug,于是乎手动整理了 ...

最新文章

  1. 加性注意力机制、训练推理效率优于其他Transformer变体,这个Fastformer的确够快...
  2. python中pos()_python中不带NLTK的POS标记器
  3. 仿照微信的效果,实现了一个支持多选、选原图和视频的图片选择器,适配了iOS6-10系统,3行代码即可集成....
  4. Java 8类型注释
  5. 2017-2018-1 Java演绎法 第三周 作业
  6. 不是程序员看不懂的21个梗,当你改错一行代码的时候...
  7. 发展前景好的互联网技术方面,你觉得比较适合女孩子的都有哪些啊?
  8. [iOS] 使用 blockable NSTimer 避免内存泄漏
  9. RHEL6解决无法使用YUM源问题
  10. perl语言中数组初始化为空和undef的不同
  11. labview技巧——自定义 5位数码管字体 显示控件
  12. Windows中的ping命令
  13. 三种call解释(一): cdcall stdcall naked call等在hook时,保持堆栈平衡
  14. 鸿蒙系统怎么在桌面添加小程序,从微信小程序到鸿蒙JS开发-menutoastdialog
  15. 机房合作—SVN skipped remains conflicted
  16. 年轻代和老年代垃圾回收
  17. WIN32 opengl环境搭建
  18. 使用pycharm搭建数据库模型
  19. [欧美音乐]Tamas Wells -《A Plea en Vendredi》[MP3+FLAC]
  20. 期刊评价标准JCR,IF,SJR以及如何查询期刊等级

热门文章

  1. Jersey入门教程
  2. 插件Sytrus合成器功能介绍
  3. 5-前置处理器:Pre Processors
  4. Git使用ssh方式下载代码
  5. HTML5视频放完自动跳转,炫酷html5 网站视频自动跳转代码,零基础秒学
  6. 西门子STEP7 OPC SERVER的组态
  7. colab配合谷歌云盘使用
  8. JNI 在实际项目中的使用方法
  9. 24小时改变你的人生【转】
  10. 中粤拼音在线转换_在Word中给汉字标注拼音、声调(二)