串口通信与定时器(计数器)、寄存器、PWM
知识来源:
https://space.bilibili.com/277276709/?spm_id_from=333.788.upinfo.detail.click
在GPIO(P)中使用串口与定时(计数)器
I/O口

串口通信(RXD、TXD)
原理
单片机与单片机、电脑之间的信号传输
最原始如图:并行通信接口,缺点是占的接口太多了

如今


缺点是不发送数据时一直处于低电平状态,当发送0XFFFF时,单片机无法识别
故增加一个低电平起始位
在低八位之后加一个停止位,是高电平
注意:通信之前,必须要知道发送端的一个停止时间,即波特率


要保证发射和接受的数值要想等

TXD、RXD、GND


使用ASCII码,单片机可以传输汉字、英语给电脑,给人看了

所以,使用keil时字符串、字符加引号,就可以自动转换了,电脑可以用文本模式或字符模式看懂
通信距离过长会导致电压降,为了解决,会使用模拟电路中的RS232、RS485(利用差分电压)。
发出串口设置



接收信号的停止

电脑与单片机间的通信要用到串口助手(软件):调参时
mricopython要确保已安装 pyserial 库,用于串口通信
适用于STM32的串口助手工具:
- PuTTY:轻量级工具,支持串口和SSH,配置简单,适合基础调试。
- Tera Term:开源工具,支持脚本自动化,适合长时间数据监控。
- SecureCRT:功能全面,支持多会话管理,适合复杂项目。
- RealTerm:专注于串口通信,支持二进制数据收发,适合底层协议调试。
STM32代码配置(以HAL库为例)
// 初始化UART(以USART1为例,波特率115200)
UART_HandleTypeDef huart1;
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
HAL_UART_Init(&huart1);
// 发送数据示例
char msg[] = "Hello STM32!\r\n";
HAL_UART_Transmit(&huart1, (uint8_t *)msg, strlen(msg), HAL_MAX_DELAY);
// 接收数据示例(需启用中断或DMA)
HAL_UART_Receive_IT(&huart1, rx_buffer, buffer_size);
串口通信在电子类竞赛中的核心作用
串口通信(UART)是一种硬件设备间双向数据传输的基础协议,在电子竞赛中充当“设备对话桥梁”。以下通过典型场景说明其价值:
传感器数据实时传输
智能车竞赛中,陀螺仪、编码器通过串口将姿态/速度数据发送给主控芯片(如STM32)。例如:
- 陀螺仪发送数据格式:
"A12.5,B45.0,C-3.2\n"(分别代表角度、角速度、加速度) - 主控芯片解析后调整电机PWM输出,实现赛道过弯防侧滑。
多模块协同控制
机器人竞赛中,机械臂主控板通过串口向舵机控制板发送指令:
// 发送"#1P1500T2000\n"表示1号舵机转到1500位置,耗时2000ms
HAL_UART_Transmit(&huart1, "#1P1500T2000\n", 13, 100);
调试信息可视化
电子设计竞赛调试时,将单片机内部变量通过串口发送到PC端显示:
- 使用串口助手工具(如Putty)查看实时波形
- 示例代码打印变量:
printf("Voltage=%.2fV, Temp=%.1fC\n", adc_value*3.3/4096, temperature);
无线通信扩展
通过蓝牙/WiFi模块(如HC-05、ESP8266)将串口转为无线通信:
- 智能车手机遥控:手机APP→蓝牙串口→STM32
- 机器人远程监控:ESP8266发送
"DIST:35cm"到云平台
典型硬件连接示例
| 场景 | 设备A | 设备B | 波特率 |
|---|---|---|---|
| STM32与OLED屏通信 | USART1_TX | OLED_RX | 115200 |
| Arduino与树莓派交互 | GPIO14(TX) | UART0_RX | 9600 |
注:实际应用需注意电平匹配(5V/3.3V)、校验位、流控等参数配置。
产品手册通常会明确标注设备的波特率设置。查找步骤如下:
-
查阅通信参数章节
手册的“通信接口”、“串口配置”或“技术规格”部分通常会列出支持的波特率范围(如9600、115200等)及默认值。 -
硬件标识
部分设备的接口附近会直接标注波特率,如RS-232/485接口的标签或PCB丝印。 -
配置软件说明
若设备需通过软件配置(如串口调试工具),手册会指导如何在软件中选择或修改波特率。 -
默认值参考
手册的“快速入门”或“默认设置”部分可能提供出厂波特率值。
串口通信的种类
串口通信(Serial Communication)通常指通过单根数据线或差分线逐位传输数据的通信方式,主要分为同步和异步两大类。常见类型包括:
-
UART(通用异步收发器)
- 最基础的异步串口,无需时钟线,双方需预设相同波特率。
- 典型应用:单片机与电脑通过USB转TTL模块通信。
-
RS-232/RS-485
- 物理层标准,基于UART协议但电平不同。
- RS-232用于短距离(如电脑串口),RS-485支持长距离和多设备。
I2C与SPI是否属于串口通信
I2C(Inter-Integrated Circuit)和SPI(Serial Peripheral Interface)属于同步串行通信协议,但与传统“串口”(如UART)有区别:
-
I2C
- 两根线:时钟线(SCL)和数据线(SDA)。
- 支持多主多从,地址寻址,速率通常100kHz~3.4MHz。
- 示例:传感器(如温度传感器)与主控芯片通信。
-
SPI
- 四根线:时钟(SCK)、主出从入(MOSI)、主入从出(MISO)、片选(SS)。
- 全双工高速通信,速率可达数十MHz。
- 示例:Flash存储器或显示屏驱动。
关键区别
| 特性 | UART | I2C | SPI |
|---|---|---|---|
| 同步性 | 异步 | 同步 | 同步 |
| 线数 | 2(TX/RX) | 2(SCL/SDA) | 4(含片选) |
| 速率 | 较低 | 中速 | 高速 |
| 寻址 | 无 | 硬件地址 | 片选信号 |
总结
- I2C/SPI是串行通信的子类,但需严格区分“串口”通常指UART或RS-232。
- 选择协议时:
- 简单调试用UART,多设备用I2C,高速场景用SPI。
定时/计数器(T)
T0、T1、T2只学模式0

T0引脚接另一个模块信号输出的脚



与串口通信关系


设置
在main函数中设置

程序
程序自动化生成(需下载对应软件)

只需复制到程序中,并在主函数处调用即可

最后,别忘了开启总中断
使用

若使用中断方式,会占用CPU时间
改良计数电路(不是计数,是计时间)



寄存器
SFR
定义
SFR(System Functional Requirement)是系统功能需求的缩写,指在系统开发或工程设计中,对系统功能的具体描述和要求。它通常用于明确系统应具备的功能特性,是系统设计和开发的重要依据。
SFR的应用领域
SFR广泛应用于软件工程、系统工程、产品开发等领域。在软件开发中,SFR用于定义软件系统的功能模块、交互逻辑和性能指标。在硬件设计中,SFR可能涉及电路功能、信号处理等具体要求。
SFR在开发流程中的作用
在需求分析阶段,SFR是用户与开发团队沟通的桥梁。开发团队根据SFR设计系统架构,测试团队依据SFR编写测试用例。SFR的完整性直接影响最终产品的质量。

寄存器的功能
寄存器是CPU内部的高速存储单元,用于暂存指令、数据和地址。其核心作用包括:
- 快速存取:直接供ALU(算术逻辑单元)使用,减少访问内存的延迟。
- 临时存储:保存运算中间结果或当前执行的指令地址(如程序计数器PC)。
- 硬件控制:配置外设或存储状态标志(如状态寄存器中的溢出位、零标志等)。
定时器的功能
定时器是独立硬件模块,用于精确计时或生成周期性信号,常见用途包括:
- 时间测量:统计事件持续时间(如脉冲宽度)。
- 事件触发:按预设间隔产生中断(如系统心跳时钟)。
- PWM生成:控制电机速度或LED亮度。
寄存器与定时器的关系
-
控制与配置
定时器的工作模式(如计数方向、分频系数)通过写入特定寄存器设置。例如,ARM Cortex-M的TIMx_CR1寄存器用于配置定时器计数模式。 -
数据交互
定时器的当前计数值通常存储在寄存器中(如TIMx_CNT),CPU可直接读取。中断标志位也通过状态寄存器(如TIMx_SR)查询。 -
性能优化
寄存器的高速特性确保对定时器的操作(如重装载值、启停控制)低延迟,满足实时性要求。
示例场景
配置STM32定时器生成1秒中断的步骤:
- 写入预分频寄存器(TIMx_PSC)设定时钟分频。
- 写入自动重装载寄存器(TIMx_ARR)设置计数上限。
- 通过控制寄存器(TIMx_CR1)启动定时器。
- 中断发生时,状态寄存器(TIMx_SR)标志位被置1,CPU响应中断。
寄存器是CPU与定时器交互的桥梁,而定时器依赖寄存器实现可编程控制。两者协同完成精确计时或事件触发任务。
脉冲输出:电路图到程序


PWM
三种电机
伺服电机、步进电机、舵机

信号来源


PWM信号输出方法
脉冲宽度调制“(PWM),调节占空比


如何产生信号:
1、CPU空转延时(舵机控制,具体函数书写8:27左右)

2、单片机在控制舵机的同时由于按键,无法正常操作其他的,这时候就要用到定时器了

未完待续
个人学习使用,仅供参考
更多推荐

所有评论(0)