STM32F103C8T6的USART串口通信及中断

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

STM32的串口通信接口有两种,分别是:UART(通用异步收发器)、USART(通用同步异步收发器)。

引脚连接方式:
TXD <-----> RXD
RXD <-----> TXD
GND <----->GND

注:RXD:数据输入引脚,接受数据; TXD:数据发送引脚,数据发送;

对于两个芯片之间的连接,两个芯片GND共地,同时TXD和RXD交叉连接。这里的交叉连接的意思就是,芯片1的RxD连接芯片2的TXD,芯片2的RXD连接芯片1的TXD。这样,两个芯片之间就可以进行TTL电平通信了。

2.RS232串口标准
RS232串口标准,它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”,该标准规定采用一个25个脚的DB-25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。

下面以计算机和调制解调器之间的通信流程来说明RS-232串行通信原理。考虑当调制解调器处于应答方式下,计算机和调制解调器之间的RS-232信号间的交互关系和工作过程。假定调制解调器是全双工的,并以RS-232标准规范工作。

(1)初始状态时,RTS、CTS持续为ON,通过通信程序设置和监测RS232引线状态。在应答模式下,计算机中的软件一直监视着振铃指示(RI),等待RI发出ON信号。

(2)计算机上的通信程序在收到RI信号后,就开始通过振铃指示器ON/OFF变换的次数对振铃进行计数,当到达程设定的振铃次数时,通信程序就发生数据终端就绪(DTR)信号,强迫调制解调器进入摘机状态。

(3)等待2s后(FCC规定),调制解调器自动开始发送其应答载波。这时调制解调器发出调制解调器就绪(DSR)信号通知计算机:它已完成所有的准备工作并等待载波信号。

(4)在持续发出DTR信号期间,计算机软件监测DSR信号。当DSR信号变为ON时,计算机就知道调制解调器已准备数据链路的连接,计算机立即开始监测数据载波监测(CD)信号,以证实数据链路的存在。

(5)当源调制解调器的载波出现于电话线上时,应答调制解调器就发出CD信号。

(6)通过发送数据线(TD)和接收数据线(RD),开始全双工通信。在数据链路传输期间,计算机通过监测CD来确保数据链路的存在。

(7)通信任务一旦完成,计算机就禁止DTR,调制解调器用除去其载波音调、禁止CD和DSR来响应。随着链路被拆除,调制解调器就会返回初始状态。

RS-232串行通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口,若距离较远需附加调制解调器( Mode),最为简单的且常用的是三线制接法,即地、接收数据、发送数据三脚相连。

3.RS232电平
RS232电平是指RS232串行通信接口中使用的电压级别。根据RS232标准,逻辑"1"表示为负电平(通常为-3V至-25V之间),而逻辑"0"表示为正电平(通常为+3V至+25V之间)。这种不对称的电平表示方式使得RS232能够在长距离和嘈杂环境下进行可靠通信。

RS232电平的特点包括:
①高电平范围为+3V至+25V,低电平范围为-3V至-25V。
②逻辑"1"使用负电平表示,逻辑"0"使用正电平表示。
③信号电平较高,能够抵抗干扰,并允许较长的传输距离(最长可达50英尺)。
④传输速率可达115200 bps(比特每秒)。

4.TTL电平
“TTL集成电路的全名是晶体管-晶体管逻辑集成电路(Transistor-Transistor Logic),主要有54/74系列标准TTL、高速型TTL(H-TTL)、低功耗型TTL(L-TTL)、肖特基型TTL(S-TTL)、低功耗肖特基型TTL(LS-TTL)五个系列。
标准TTL输入高电平最小2V,输出高电平最小2.4V,典型值3.4V;输入低电平最大0.8V,输出低电平最大0.4V,典型值0.2V。
S-TTL输入高电平最小2V,输出高电平最小Ⅰ类2.5V,Ⅱ、Ⅲ类2.7V,典型值3.4V;输入低电平最大0.8V,输出低电平最大0.5V。
LS-TTL输入高电平最小2V,输出高电平最小Ⅰ类2.5V,Ⅱ、Ⅲ类2.7V,典型值3.4V;输入低电平最大Ⅰ类0.7V,Ⅱ、Ⅲ类0.8V,输出低电平最大Ⅰ类0.4V,Ⅱ、Ⅲ类0.5V,典型值0.25V。

5.RS232电平和TTL电平的区别
TTL电平标准是 低电平为0,高电平为1(对地,标准数字电路逻辑)。
RS232电平标准 是 正电平为0,负电平为1(对地,正负3-15V皆可,甚至可以用高阻态)。

(1)电压
RS232电平的电压范围较高,正负电平分别为+3V至+25V和-3V至-25V。而TTL电平的电压范围较低,一般为0.2V至3.4V或0V至5V。因此,RS232电平较高,能够提供更大的信号幅度,使其具有较强的抗噪声和抗干扰能力。

(2)范围
RS232电平的电压范围较大,它可用于长距离通信,最长传输距离可达50英尺,甚至更远。而TTL电平的传输距离较短,一般不超过15米。因此,在需要长距离通信的场景中,RS232电平更为合适。

(3)接口电路
RS232电平使用差分信号传输,即发送线和接收线各自携带相反的信号。这种差分传输方式可以有效抑制共模干扰,并提高数据传输的可靠性。而TTL电平使用单端信号传输,只用一根线传输信号,外加一根参考线,也就是地线。那一根线分别携带不同的电平表示逻辑"1"和逻辑"0"。TTL电平的接口电路相对简单,成本较低。

总结:
RS232是一种串行通信接口标准,其电平表示为负电平和正电平,适用于长距离和抗干扰要求较高的通信环境。与之相比,TTL电平具有低电压范围和较短的传输距离,适用于短距离通信和成本敏感的应用。

(二)USB/TTL转232"模块的工作原理
串口数据收发流程:


以CH340芯片模块为例

CH340C模块
CH340C USB转TTL模块以CH340C芯片为核心,内部自带晶振,最高波特率可达2Mbps,软件兼容CH341驱动,过流保护,引出相应的通讯接口与电源接口,通讯接口带有指示灯指示工作状态,通讯稳定,体积小。

CH40C特点:
①全速USB驱动,兼容USB2.0
②硬件全双工串口,内置收发缓冲区
③支持波特率50bps~2Mbps
④输出TTL电平3.3V,兼容5V的IO电平

输入输出接口引脚均带有LED指示灯
电源接口引脚中,5V的接口引脚带有LED指示灯

t

二、使用HAL库进行STM32的USART串口通信
(一)UART常用函数
1.串口句柄
HAL库在结构上,对每个外设抽象成了一个称为ppp_HandleTypeDef的结构体,其中ppp就是每个外设的名字。所有的函数都是工作在ppp_HandleTypeDef指针之下。

例如,使用USART1时,可以定义USART初始化结构体变量(全局变量)huart。

UART_HandleTypeDef huart1;
huart1就被称为串口的句柄,它被贯穿整个USART收发的流程。

2.HAL_UART_Transmit

通过该函数可向串口寄存器 USART_DR 写入一个数据,当向该寄存器写数据的时候,串口就会自动发送。
函数原型:

3.HAL_UART_Receive_IT

作用是开启接收中断,同时设置接收的缓存区以及接收的数据量,并进入回调函数。
函数原型:

HAL_UART_Receive_IT函数是启动串口接收并且是中断接收,需要在初始化USART外设之后才能被调用。

在使能了USART接收中断之后,stm32在每次接收到一个字节数据之后,就会自动运行USART1_IRQHandler函数一次,但不会每次都运行一次HAL_UART_RxCpltCallback函数。只有当接收到数据字节数与在HAL_UART_Receive_IT函数设定的接收数目相等时才会运行一次接收完成回调函数。

注:一定要在进入while前写一次,为了开启中断(回调函数里面也会写的)

4.HAL_UART_RxCpltCallback
在判断到是接到串口数据并且数据数目达到设定值时就会调用接收完成回调函数HAL_UART_RxCpltCallback。这样我们在回调函数中实现我们的应用程序。

当CPU向串口发送数据,会产生接收中断,然后进入中断服务函数,调用回调函数,回调函数才是我们进行中断处理的地方

(二)程序编写

1.STM32CubeMX工程创建
2.编写程序
(1)STM32系统给windows11连续发送“hello windows!”

用keil打开刚刚生成的文件,找到main.c,并在main函数循环中使用 HAL_UART_Transmit函数发送hello windows!

(2)在持续发送“hello windows!”的基础上,当上位机给stm32发送一个字符“#”后,stm32暂停发送“hello windows!”;发送一个字符“*”后,stm32继续发送
①定义全局变量
打开main.c文件,在void SystemClock_Config(void);之后定义全局变量

②开启中断

在进入while循环之前,写入HAL_UART_Receive_IT函数,以启动串口中断接收

③进行传输

在while循环中添加传输代码

④重写中断处理函数

在main函数之后重写中断处理函数

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,其中包含一个串口接口(USART),可用于串口通信。通过使用STM32CubeMX软件和STM32库来配置和控制USART接口,可以实现收发数据。 ### 回答2: STM32F103C8T6是一款常见的ARM Cortex-M3微控制器,具有强大的功能和灵活的输入输出能力,尤其是在串口通信方面。本文将介绍如何使用STM32F103C8T6USART模块实现串口收发功能。 首先,需要在STM32F103C8T6的引脚分配中,确定USART使用的引脚。USART有两个引脚分配方式:使用PA9和PA10引脚或者使用PB6和PB7引脚,需要根据具体情况进行选择。同时,在程序编写时,也需要引入相关的库文件。 在代码编写方面,为了方便管理,通常会将串口收发的相关操作封装到一个函数中。下面是一个实现串口接收方式的函数: ```c void USART1_IRQHandler(void) { uint8_t ucData; if (USART1->SR & USART_SR_RXNE) { ucData = USART1->DR; USART1->DR = ucData; } } ``` 首先,定义了一个变量ucData,用于存储收到的数据。在中断服务函数中,首先需要判断是否接收到数据,通过检查USART_SR_RXNE标志位可以实现。如果接收到数据,则将数据存储到ucData变量中,并将数据发送回去,这可以通过将ucData赋值给USART1->DR进行实现。 接下来是串口发送方式的函数: ```c void USART1_SendData(uint8_t ucData) { while ((USART1->SR & USART_SR_TC) == 0) {}; USART1->DR = ucData; } ``` 通过使用while循环,检查USART_SR_TC标志位,等待发送完成。然后,通过将数据写入USART1->DR实现数据发送。在Main函数中调用这些函数,即可实现串口收发功能。 总之,通过相应的引脚分配、库文件引入以及编写串口发送和接收函数,我们可以轻松实现STM32F103C8T6USART串口收发功能,实现与其他设备的数据传输。 ### 回答3: stm32f103c8t6是一款非常流行的微控制器,并且它有内置的USART串口模块,可以方便地进行串口通信USART串口有许多不同的配置参数,包括波特率、数据位、停止位、奇偶校验位等等。在本文中,我们将通过stm32f103c8t6USART串口收发实现一个简单的通信程序。 首先,我们需要在stm32f103c8t6的引脚中选择USART串口对应的引脚进行连接。USART串口可以选择两个不同的引脚组进行连接,分别是PA9和PA10,以及PB6和PB7。在本示例中,我们将使用PA9和PA10进行串口通信。其中,PA9对应USART1_TX引脚,PA10对应USART1_RX引脚。 接下来,我们需要进行USART串口的初始化配置。具体的配置参数包括波特率、数据位、停止位、奇偶校验位等等。在本示例中,我们将选择9600波特率、8位数据位、1位停止位、无奇偶校验位。至于为什么选择这些参数,主要是因为它们是常用的配置,应用广泛,同时也非常稳定可靠。 USART串口初始化之后,我们就可以进行数据的收发了。在本示例中,我们将设置单片机为发送端,使用USART串口发送一段字符串数据。同时,我们也将设置单片机为接收端,接收来自计算机或其他串口设备发送过来的数据。为了简化操作,我们将使用stm32f103c8t6的内置的USART中断机制。这样就可以让单片机在接收和发送数据时,能够及时地响应并处理数据。 总之,stm32f103c8t6内置的USART串口模块是非常强大和灵活的,可以满足各种不同的串口通讯需求。通过合理地配置串口参数和使用中断机制,我们可以轻松地实现高效、可靠的数据收发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值