IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 分别使用寄存器地址方式和HAL库实现流水灯 -> 正文阅读

[嵌入式]分别使用寄存器地址方式和HAL库实现流水灯

一.串口协议和RS-232标准,以及RS232电平与TTL电平的区别

串口通信协议:

串口通信指串口按位(bit)发送和接收字节。尽管比特字节(byte)的串行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。串口通信协议是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485。

RS-232标准:

RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。RS-232只限于PC串口和设备间点对点的通信。RS-232串口通信最远距离是50英尺。

DB-9针连接头:

在这里插入图片描述

从计算机串口截面图。RS-232针脚的功能:

数据:

TXD(pin 3):串口数据输出(Transmit Data)

RXD(pin 2):串口数据输入(Receive Data)

握手:

RTS(pin 7):发送数据请求(Request to Send)

CTS(pin 8):清除发送(Clear to Send)

DSR(pin 6):数据发送就绪(Data Send Ready)

DCD(pin 1):数据载波检测(Data Carrier Detect)

DTR(pin 4):数据终端就绪(Data Terminal Ready)

地线:

GND(pin 5):地线

其它:

RI(pin 9):铃声指示

RS232电平与TTL电平的区别:

TTL电平信号之所以被广泛使用,原因是因为:通常我们采用二进制来表示数据。而且规定,+5V等价于逻辑“1”,0V等价于逻辑“0”。这样的数据通信及电平规定方式,被称做TTL(晶体管-晶体管逻辑电平)信号系统。这是计算机处理器控制的设备内部各部分之间通信的标准技术。

rs232是个人计算机上的通讯接口之一,由电子工业协会(Electronic Industries AssociaTIon,EIA) 所制定的异步传输标准接口。通常 RS-232 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25) 的型态出现,一般个人计算机上会有两组 RS-232 接口,分别称为 COM1 和 COM2。RS232的电平标准为+12V为逻辑负,-12为逻辑正,TTL电平为5V为逻辑正,0为逻辑负

TTL电平标准:

输出 L: 《0.8V ; H:》2.4V。

输入 L: 《1.2V ; H:》2.0V

TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。于是TTL电平的输入低电平的噪声容限就只有(0.8-0)/2=0.4V,高电平的噪声容限为(5-2.4)/2=1.3V。

CMOS电平标准:

输出 L: 《0.1Vcc ; H:》0.9Vcc。

输入 L: 《0.3Vcc ; H:》0.7Vcc.

由于CMOS电源采用12V,则输入低于3.6V为低电平,噪声容限为1.8V,高于3.5V为高电平,噪声容限高为1.8V。比TTL有更高的噪声容限。

RS232标准:

逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次。

TTL与CMOS电平使用起来有什么区别?

1.电平的上限和下限定义不一样,CMOS具有更大的抗噪区域。 同是5伏供电的话,ttl一般是1.7V和3.5V的样子,CMOS一般是2.2V,2.9V的样子,不准确,仅供参考。

2.电流驱动能力不一样,ttl一般提供25毫安的驱动能力,而CMOS一般在10毫安左右。

3.需要的电流输入大小也不一样,一般ttl需要2.5毫安左右,CMOS几乎不需要电流输入。

4.很多器件都是兼容TTL和CMOS的,datasheet会有说明。如果不考虑速度和性能,一般器件可以互换。但是需要注意有时候负载效应可能引起电路工作不正常,因为有些ttl电路需要下一级的输入阻抗作为负载才能正常工作。

5.TTL电路和CMOS电路的逻辑电平

VOH: 逻辑电平 1 的输出电压

VOL: 逻辑电平 0 的输出电压

VIH : 逻辑电平 1 的输入电压

VIH : 逻辑电平 0 的输入电压

? 1.TTL电路临界值:

VOHmin = 2.4V VOLmax = 0.4V

VIHmin = 2.0V VILmax = 0.8V

CMOS电路临界值(电源电压为+5V)

VOHmin = 4.99V VOLmax = 0.01V

VIHmin = 3.5V VILmax = 1.5V

2. TTL和CMOS的逻辑电平转换

CMOS电平能驱动TTL电平

TTL电平不能驱动CMOS电平,需加上拉电阻

3. 常用逻辑芯片特点

74LS系列: TTL 输入: TTL 输出: TTL

74HC系列: CMOS 输入: CMOS 输出: CMOS

74HCT系列: CMOS 输入: TTL 输出: CMOS

CD4000系列: CMOS 输入: CMOS 输出: CMOS

图:RS232和TTL/CMOS电平反相。

在这里插入图片描述

二.CH340芯片模块的工作原理

在这里插入图片描述

三.使用GPIO端口完成3只LED红绿灯的周期闪烁。

stm32CubeMX安装参考:https://blog.csdn.net/qq_43279579/article/details/112213196

使用寄存器地址方式完成:

https://blog.csdn.net/qq_45659777/article/details/120835273

使用Keil观察分析管脚时序波形:

在这里插入图片描述

管脚A4,B5,C14的时序波形图如上所示,周期为0.696s,同一时间内只有一个高电平可以点亮一个LED灯。

使用HAL库完成:

打开STM32CubeMX软件,新建项目,选择自己要使用的开发板,此处我使用的是STM32F103C8。

找到RCC,设置HSE为Crystal/Ceram…,在Pinout view中点击选择自己要使用的引脚(此处我选择的是A1,A3,A5三个引脚),设置为GPIO_Output,在GPIO中设置如下:

在这里插入图片描述

点击Project Manager,为该项目命名,设置Toolchain / IDE为MDK-ARM,同时注意保存路径中不要出现中文,否则容易出错。

点击右上角GENERATE CODE,自动生成代码。

在Keil中打开该项目,使用HAL库开发,相关函数为:

①延时函数(HAL_Delay)
函数原型: void HAL_Delay (__IO uint32_t Delay)
参数说明:Delay表示所要延时的时间大小,单位是毫秒
②写管脚函数(HAL_GPIO_WritePin)
函数原型:void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t
GPIO_Pin, GPIO_PinState PinState)
参数说明:
GPIOx: 管脚组(x的取值为A~G)
GPIO_Pin: 管脚编号(x的取值为0~15)
PinState: 管脚的状态(取值为GPIO_BIT_RESET表示0, GPIO_BIT_SET表示1)

在main.c文件中main函数中的while循环中添加如下代码:

//写循环执行的代码		
		HAL_GPIO_WritePin(GPIOA, LED2_Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA,LED3_Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA, LED4_Pin, GPIO_PIN_RESET);
		HAL_Delay(1000);
		HAL_GPIO_WritePin(GPIOA, LED2_Pin, GPIO_PIN_SET);
		HAL_Delay(1000);
		
		HAL_GPIO_WritePin(GPIOA, LED2_Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA,LED3_Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA, LED4_Pin, GPIO_PIN_RESET);
		HAL_Delay(1000);
		HAL_GPIO_WritePin(GPIOA, LED3_Pin, GPIO_PIN_SET);
		HAL_Delay(1000);
		
		HAL_GPIO_WritePin(GPIOA, LED2_Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA,LED3_Pin, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA, LED4_Pin, GPIO_PIN_RESET);
		HAL_Delay(1000);
		HAL_GPIO_WritePin(GPIOA, LED4_Pin, GPIO_PIN_SET);
		HAL_Delay(1000);

注意代码的地址要写在用户代码区域!!!
编译,生成.hex文件,使用串口下载软件FlyMCU下载到STM32,(下载时,BOOT0置1,BOOT1置0),下载完毕后,BOOT0置0,BOOT1置1,可以观察到对应管脚的LE,循环闪烁。
效果:
https://www.bilibili.com/video/BV1iq4y157RH/

使用Keil观察分析管脚时序波形:
在这里插入图片描述
管脚A1,A3,A5的时序波形图如上所示,周期为1s,同一时间内只有一个高电平可以点亮一个LED灯。

四.总结

该实验使用编程方式和HAL库实现流水灯。

五.参考链接:

http://www.elecfans.com/emb/jiekou/20171101573461.html

https://blog.csdn.net/qq_43279579/article/details/112213196

https://blog.csdn.net/qq_43279579/article/details/112233696

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:20:51  更:2021-10-21 12:32:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:26:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码