入门单片机stm32要如何更好的学习_rich369的博客-程序员秘密

stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm32的视频资料便于学习参考。

什么是串口

UART : Universal Asynchronous Receiver/Transmitter 通用异步收发器

USART : Universal Synchronous Asynchronous Receiver/Transmitter

通用同步/异步收发器

一种是常用也是最简单的串行数据传输协议。数据线只需要两根就可以实现全双工。

Tx: 发送数据线

Rx: 接收数据线

A B

TX -----------> Rx

Rx <------------Tx

全双工: 两个设备可以同时发送和接收

串行数据: 发送只一根线,一次只能发送一bit. 一bit接着一bit发送和接收。

模块通信: 上位机 下位机

通信一般需要两个设备,我们把这两个设备,人为叫做上位机, 下位机。

上位机: 把处理性能强的机子,上位机。数据大部分处理都在上位机完成。

下位机: 把数据采集的终端,处理性能单一的机子,下位机。

串口只有一根发送数据线,假如 A要发送一个字符数据  10101010 给B

A -------- ---------

-------- ------- …

高电平周期是多长?即使是不发送数据Tx线上也有一个电平状态,接收方

它怎么知道你是在发送呢?..

UART数据如何传输?

UART protocol 串口协议。

串口发送和接收数据是以帧为单位. Frame

1帧(Frame)= 1 start bit(起始位) + 5-9bits数据位 + 0/1bit 校验位  + stop bits(0.5,

1,1,5,2)

起始位: 一个周期的低电平

数据位: 5-9bits数据位,具体是多少bits,需要双方协商。并且传送是先传送LSB(最低位) … MSB

校验位:

0 bit :没有校验位

1 bit :校验位. “赖子” X

D0 D1 D2 … Dn X

奇校验:要保证传输的1为奇数

D0 D1 D2 … Dn X 要保证这一串数据中1的个数为奇数

1 0 1 0 1 0 1 0 X(1)

1 0 1 0 1 0 1 1 X(0)

偶校验:要保存传输的1为偶数

停止位: 高电平

0.5 个停止位。 半个周期的高电平

1 个停止位

1.5 个停止位

2 个停止位

Baudrate(波特率): 传输速率。

决定 时间周期。

115200 bps: bits per second

物理层标准  the physical layer standards

TTL level UART : TTL电平串口

RS-232:

RS-422:

RS-485:

TTL level UART:

逻辑低电平(0) 0V

逻辑高电平(1) 5V/3.3V

RS-232: 适合较长距离传输

逻辑低电平(0) +3v~+15V

逻辑高电平(1) -3v~-15v

TTL UART RS-232 RS-422 RS-485

电平 1 3.3V/5V 1 -5V ~ -15V +/- 2v +/- 1.5v

0 0V 0 5V ~ +15V

信号 单端信号   单端信号  差分信号   差分信号

传输长度 < 2m <15m <1200m <1200m

不同标准的串口,引脚也不一样。TX/Rx是一定存在的。

TTL

RX

TX

GND

VCC

STM32F4xx 串口控制器

TX

RX

硬件流控:

RTS: Request To Send 请求发送信号

终端告诉对方可以向我传输数据啦。

CTS: Clear To Send 清除发送信号

对方告知终端,我要向你发送数据啦

RTS -------> CTS(对方)

CTS <------- RTS(对方)

标志位:

TXE: Transmit data Register Empty

发送数据寄存器为空。

不代表上一次数据已经发送完成啦,因为数据有可能还在 shifter里面

但是此时您可以向TDR写数据啦。

TC : Transmit Complete

发送完成。

发送移位寄存器中的数据已经发送到Tx引脚上面去了。

RXNE: Read Data register Not Empty

接收数据寄存器不为空。意思是你可以读数据啦。

STM32F4xx串口代码流程

(1) GPIO口配置

串口的TX/RX 引脚是由GPIO口来复用的。

a. 使能GPIO分组的时钟

RCC_AHB1PeriphClockCmd

b. 配置GPIO口的功能 GPIO_Init

c. 选择具体的复用功能

GPIO_PinAFConfig

(2) usart配置

a. 使能usart时钟

b. USART_Init

USART_Init(USART_TypeDef * USARTx, USART_InitTypeDef *

USART_InitStruct);

typedef struct

{

uint32_t USART_BaudRate; // 波特率

uint16_t USART_WordLength; //传输字长 ,如下两个任选其一:

USART_WordLength_8b

USART_WordLength_9b

在STM32中:传输字长=数据位数+检验位数

uint16_t USART_StopBits; //停止位数,如下 :

USART_StopBits_1 1bit停止位

USART_StopBits_1_5 1.5bit停止位

USART_StopBits_2 2 bits停止位

USART_StopBits_0_5 0.5bit停止位

uint16_t USART_Parity; //校验方式,如下:

USART_Parity_No 无校验

USART_Parity_Odd 奇校验

USART_Parity_Even 偶校验

uint16_t USART_Mode; //串口模式, 如下:可以组合

USART_Mode_Tx 发送模式

USART_Mode_Rx 接收模式

USART_Mode_Tx | USART_Mode_Rx 发送和接收模式

uint16_t USART_HardwareFlowControl; //硬件流控

USART_HardwareFlowControl_None 无硬件流控

USART_HardwareFlowControl_RTS RTS 请求发送。你可以接收对方的数据。

USART_HardwareFlowControl_CTS CTS 清除发送,你可以发数据给对方。

USART_HardwareFlowControl_RTS_CTS RTS_CTS 发送和接收都用流控

} USART_InitTypeDef;

(3) 中断的配置

USART_ITConfig <- 配置串品的中断

在STM32中一个USART只对应一个中断通道,但是引起串口中断的

事件有很多,比如:

TXE -> 发送寄存器为空,可以引起串口中断

TC -> 发送完成,可以引起串口中断

RXNE -> 接收寄存器不为空,可以引起串口中断

……

只不过,这些事件需要"中断控制位使能"

USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);

USART_ITConfig就是用来把一个串口的XX事件,配置成是否引起串口中断的

在串口中断函数里面,就需要判断是哪个串口事件,引起了中断!!!

NVIC_Init()

(4) 使能串口

USART_Cmd

接收(中断函数)

USART1_IRQHanlder()

{

if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

{

//有数据可读啦

data = USART_ReceiveData(USART1); //读取接收到的数据

}

//清除USART1的中断标志

USART_GetITStatus

}

USART_GetITStatus用来获取串口的xx事件标志位

发送数据

USART_SendData(USART1, 0x55);

while (USART_GetFlagStatus(USRAT1, USART_FLAG_TXE) == RESET); //等待发送结束

     资料分享交流裙:112--6743--406

stm32视频学习资料

(stm32 USART串口应用)

http://www.makeru.com.cn/live/1392_1164.html?s=156461

PWM脉宽调制技术

http://www.makeru.com.cn/live/4034_2146.html?s=156461

基于STM32讲解串口操作

http://www.makeru.com.cn/live/1758_490.html?s=156461

通过Z-stack协议栈实现串口透传

http://www.makeru.com.cn/live/1758_330.html?s=156461

(stm32直流电机驱动)

http://www.makeru.com.cn/live/1392_1218.html?s=156461

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/rich369/article/details/107100596

智能推荐

一些新技术汇总_追寻北极的博客-程序员秘密

最近在网上查资料碰到好多没接触过的技术,先汇总在这里备用,以后慢慢吸收 1. JNAJNI的替代品,调用方式比JNI更直接,不再需要JNI那层中间接口,几乎达到Java直接调用动态库 2. SmallSQL基于JDBC3.0转为Desktop应用设计的嵌入式数据库,纯Java,本地访问,不支持网络但目前好像不太活跃,最新版本是0.2,并且2008年后没有更新 3

大学的第一个学期_ljr12345620的博客-程序员秘密

      匆匆又是一个寒暑,在爆竹声中迎来了新的一年…   算算年纪已经不小了,囊中羞涩,真的感觉不到一点喜庆带来的欣喜。在艰难困苦中度过了一个学期,那曾经向往的大学生活,但没感觉到因自己的节省感到欣慰,更觉得自己的无力。现实的脚步太快,让我追的喘不过气来。   大学的时间真的是太多了,多的我总在想,想的又做不了,真是焦急啊!索性又在问自己人生的目标是什么,却总也想不出一个答案。迷茫是我

Windows下用Nginx+Tomcat配置集群负载均衡_俺总在笑的博客-程序员秘密

Nginx是一款轻量级的web服务器/反向代理服务器,更详细的释义自己百度了。目前国内像新浪、网易等都在使用它。

leetcode 106.从中序与后序遍历序列构造二叉树_黑暗主宰的博客-程序员秘密

leetcode 106.从中序与后序遍历序列构造二叉树题目描述根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解题思路在...

Unreal中播放的图片序列与其重新导出的动画序列速度不一致的问题_SHCQMY的博客-程序员秘密_ue4动画序列镜头输出不匹配

问题描述:使用media texture将一段视频作为材质赋予网格,然后进行播放。在编辑器中预览时动画是正确的,而当使用Sequencer对场景进行输出的时候,这段场景中的视频的播放速度会远远快过于实际的速度。原因分析:这个问题并不是由BUG产生的。由于Unreal播放视频实际是使用操作系统自带的播放器播放的而不是在引擎内部进行播放。所以当我们在引擎中渲染一段已经预渲染好的视频的时候,这个视频实际上会以视频实际的帧速率(比如每秒24帧)播放(因为预渲染的视频是在引擎外部播放的),而引擎输出图像的渲

【AJAX】XMLHTTPRequest对象_好好生活_的博客-程序员秘密

在上一篇博客中,我们了解到了AJAX方式下的Web应用程序与传统方式下的Web应用程序有着一个最大的不同之处是:数据传输中不用刷新整个网页,给带来了一种不一样的用户体验。这种技术的核心就是利用的XMLHTTPRequest对象。    那么,这篇博客就一起来学习XMLHTTPRequest对象。    一.什么是XMLHTTPRequest。    中文可以解释为可扩展超文本传

随便推点

安卓9省电模式linux,iOS9如何开启/关闭省电模式(低功耗模式)_经年哲思的博客-程序员秘密

【iPhone中文网】iOS9的一大亮点就在于它的省电低功耗模式,苹果官方宣称iOS9上从系统底层对续航进行重新优化,开启省电模式之后,系统的续航待机将延长3个小时。那么,iOS9如何开启/关闭省电模式呢,下面小编就来介绍详细的方法教程,一起来看看吧。iOS9省电模式开启/关闭教程① 依次进入设置&gt;电池;② 将「低电量模式」开关开启即可进入省电模式。省电模式开启后,右上角电池图标会变成黄色,...

苏州木渎计算机课程培训,苏州木渎H5/web全栈开发培训_weixin_39805180的博客-程序员秘密

课程名称:H5/web全栈开发课程类型:网页设计班型:全日制/周末班/晚班适用校区:全校区课程详情:由于网络的发展以及人们使用网络的频繁性,企业需要通过网页呈现产品、服务、理念、文化,或向大众提供某种功能服务,这也使得网页设计队伍愈加壮大。网页设计是一个不断更新换代、推陈出新的行业,它要求设计师们必须随时把握较新的设计趋势,从而自己不被这个行业所淘汰。1、 无计算机基础,想要从事IT开发的学员;...

【youcans 的 OpenCV 例程200篇】140. 灰度底帽变换校正光照_YouCans的博客-程序员秘密

灰度图像 f 的低帽变换定义为图像闭运算结果减去原图像。闭运算可以删除亮背景下的暗区域,底帽变换可以得到原图中的暗区域,因此又称黑底帽变换。均匀光照对于从背景中提取目标十分重要。类似地,底帽变换的重要用途也是校正不均匀光照的影响,可以用于删除亮背景下的暗区域,从而得到原图中的暗区域。

静态导入\自动装箱、拆箱\增强for循环_乄鎭鈊愛妳的博客-程序员秘密

静态导入Import static 包名.类名.静态属性|静态方法|*静态导入语句使用import static 语句导入指定类的单个静态属性:                                   import static java.lang.System.out导入指定类静态方法 import static java.lang.Math.max导入指

Java - 函数式编程(2):常用的流操作_b9x_的博客-程序员秘密

流操作: 即stream接口针对于集合类提供的操作。集合类.stream()集合获取到stream(流),随之进行自己想要的操作。filter():按照一定条件过滤集合的元素 。 list.stream().filter(x -&amp;gt; x &amp;gt; 5); 像filter()这类返回值为Stream的方法,它其实只是刻画出了stream,并没有产生新的集合,也就是按照规则构造出Stre...

大数据———Flume与Kafka整合_KledLi的博客-程序员秘密

环境配置 名称 版本 下载地址 Centos 7.0 64x 百度 Flume 1.8.0 http://flume.apache.org/download.html Kafka 2.11 http://mirror.bit.edu.cn/apache/kafka/1.0.0/kafka_2.11-1.0.0.tgz