首页天道酬勤usart和uart区别,GPIO模式

usart和uart区别,GPIO模式

admin 05-13 01:09 230次浏览

本文章立足于浅层应用的方法而非深入原理的理解,这两者满足的是不同的需求,但是之后可能会补足原理的学习。

3358www.Sina.com/通用输入/输出端口的简称,GPIO端口(部件上的一个GPIO (General Purpose Input/Output))输出高低引脚或读取外部输入级

(实际上,操作GPIO端口的函数修改了GPIO的电平数据,硬件状态取决于硬件寄存器数据的更改。)

GPIO通常有三种状态。 在硬件寄存器STM32中,必须首先为特定管脚设置输入/输出模式。 此外,还可以通过GPIO Pull-up/Pull-down设置特定状态。 (上拉式:通过电阻将不确定的信号设定为高电平,下拉式:通过电阻将不确定的信号设定为低电平)

函数操作(HAL库) :

/*#define GPIO_PIN_RESET 0 //低级#define GPIO_PIN_SET 1 //高级*/typedef enum{ GPIO_PIN_RESET=0,////写入级gpio _ pinstatehal _ gpio _ read pin (gpio _ typedef * gpiox,uint16_t GPIO_Pin ) /读取级void Hal _ gpio 具体参照以下GPIO_PinState枚举系统的高电平/低电平之一*/详细内容:

一个GPIO_Pin对应一个位(0或1 ),其他部分互补后得到一个uint16_t,无符号16位,占用2个字节,范围0-65535,相当于短)。 定义如下。

#definegpio_pin_0((uint16_t )0x0001 )/pin0selected )/#definegpio_pin_1) ) uint 16 _ t0x 002 )/002 dfinegpio_pin_5(uint16_t )0x0020 )/* pin5selected */# define gpio _ pin _6) ) uint 16 _ t (0x 040 )/* )0x 0080 (/* pin7selected (/# define gpio _ pin _8) ) (uint16_t )0x0100 )/*pin8selected )/#definegpio_pin_ dfinegpio_pin_10(uint16_t )0x0400 )/* pin 10选定*/# define gpio _ pin _ 11 ) (uint16_t )0x0800 ) 000 pin 13选定)/# define gpio _ pin define gpio _ pin _ 15 (uint 16 _ t )0x8000 )/* pin 15选定*/# define gpio

_PIN_All ((uint16_t)0xFFFF) /* All pins selected */

同时上面的三个函数支持同时对多个端口操作,因此只要将几个 GPIO 口通过或运算即可得到操控多个 GPIO 口的参数。

UART(Universal Asynchronous Receiver/Transmitter)是通用异步收发传输器的简称,可以实现全双工通信
几个概念:

双工通信(Duplex Communication) 是指在同一时刻信息可以进行双向传输。这种发射机和接收机分别在两个不同的频率上能同时进行工作的双工机也称为 异频双工机半双工通信(Half Duplex Communication),又称为双向交替通信,即通信的双方都可以发送信息,但不能双方同时发送(当然也就不能同时接收)。这种通信方式是一方发送另一方接收,过一段时间后再反过来。全双工通信(Full Duplex Communication),又称为双向同时通信,即通信的双方可以同时发送和接收信息的信息交互方式。同步通信(Synchronous Communication) 要求发收双方具有同频同相的同步时钟信号,只需在传送报文的最前面附加特定的同步字符,使发收双方建立同步,此后便在同步时钟的控制下逐位发送/接收。异步通信(Asynchronous Communication) 是指通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。相对于同步通信,异步通信在发送字符时,所发送的字符之间的时隙可以是任意的。接收端必须时刻做好接收的准备,发送端可以在任意时刻开始发送字符。因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。内部处理器在完成了相应的操作后,通过一个回调的机制,以便通知发送端发送的字符已经得到了回复。

UART通信协议将每个字符一位一位地传输,在没有资料传输时恒为 “1”(空闲位)。开始传输一个字符时,先发送一个 “0”(起始位)表示传输开始,接着一位一位地发送字符的 ACSLL 码(资料位),然后发送一个 “1” 或 “0” (奇偶校验位)表示资料位加上这一位后,“1” 的位数应为偶数(偶校验)或奇数(奇校验),最后发送一个高电平作为停止位表示一个字符数据传输结束并一次矫正时间同步。

波特率(baud):是衡量资料传送速率的指标,表示每秒钟传送的符号数。一个符号代表的信息量(比特数)与符号的阶数有关。因此波特率和比特率不一样。
符号的阶数:若传输使用 256 阶符号,每 8bit 代表一个符号。

函数操作(HAL库):

typedef enum { HAL_OK = 0x00U, HAL_ERROR = 0x01U, HAL_BUSY = 0x02U, HAL_TIMEOUT = 0x03U} HAL_StatusTypeDef; // 16 进制 8 位无符号数,后面的 U(小写也可) 代表无符号HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size, uint32_t Timeout); // Transmit 代表发送消息HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size, uint32_t Timeout); // Receive 代表接收消息HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size);HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size);/**huart 为 UART 端口的地址(记得取地址!),下面有详细定义*pData 为发送/接收的信息起始位置(地址),可以为一个 uint8_t 或者 unsigned char 类型的数组Size 为发送/接收信息的字节数,发送 uint8_t 类型变量的数量Timeout 起到限制时间的作用,若超时则停止并返回 HAL_TIMEOUT_IT 表示使用串口中断模式_DMA 表示使用串口 DMA 模式*/

串口中断模式(以接收数据为例):

首先使能串口中断功能并等待。接收到数据时进入中断处理函数处理数据。数据接收完成以后,进入中断回调函数。 // 中断回调函数,Tx 为发送,Rx 为接收void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);// 中断处理函数(不分发送接收,在函数内判断)void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);// 中断处理函数接着选择执行接收中断处理函数或者发送中断处理函数void UART_Receive_IT(UART_HandleTypeDef *huart);void UART_Receive_IT(UART_HandleTypeDef *huart);

注意:
Transmit 的决定权在自己手里,当然是随时随地都能发,但是我们却不知道在执行 Receive 之后什么时候能收到数据。因此,这里的 Receive 其实是“使程序能够接收数据”,故在每一次接收完成以后若想继续接收,需要重新调用 HAL_UART_Receive_IT 函数。

安全屋扩大“厦门效应”java计算机毕业设计科技专业师生沟通平台源码+数据库+lw文档+系统单击Scrapy-Splash中的按钮Java 如何使用Feign发送HTTP请求短信群发平台怎么正确做到的短信群发呢?html表格的作用有哪些
nrf52832开发环境,nrf51822中文手册 RTU模式,串口uart
相关内容