stm32f103c8t6串口显示传感器数据
时间: 2025-05-03 20:42:06 浏览: 32
### 实现 STM32F103C8T6 单片机读取传感器数据并串口打印功能
#### 硬件连接说明
为了实现该功能,需将 MQ-2 烟雾传感器的模拟信号输出端 (AO) 连接到 STM32F103C8T6 的 ADC 输入引脚。同时,通过 USB 转 TTL 串口模块将 STM32 的 USART 模块与电脑相连以便于数据传输和显示。
硬件连接如下:
- **MQ-2 AO 输出** → STM32 PA0(ADC_IN0)
- **STM32 TXD 引脚** → USB-TTL RXD
- **STM32 RXD 引脚** → USB-TTL TXD
- **GND 和 VCC** 正确接线[^1]
---
#### 配置步骤
##### 使用 STM32CubeMX 工具配置外设
1. 打开 STM32CubeMX 并创建新工程,选择目标 MCU 型号为 STM32F103C8T6。
2. 配置 ADC 模块:
- 将 PA0 设置为 Analog Input Mode。
- 启用 ADC1,并设置采样时间为默认值或其他适合的时间间隔。
3. 配置 USART 模块:
- 选择 USART1 或其他可用的 USART 接口。
- 设置波特率为 9600 bps,默认停止位为 1,无校验。
4. 生成初始化代码并导入 Keil MDK 或 STM32CubeIDE 中继续开发。
---
#### 示例代码
以下是完整的 C 语言代码示例:
```c
#include "stm32f1xx_hal.h"
// 定义全局变量存储 ADC 数据
uint16_t adcValue;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_USART1_UART_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
// 初始化 GPIO、ADC 和 USART
MX_GPIO_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();
while (1)
{
// 开始一次 ADC 转换
HAL_ADC_Start(&hadc1);
if(HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK){
adcValue = HAL_ADC_GetValue(&hadc1); // 获取转换后的数值
// 将 ADC 数值转化为字符串并通过 UART 发送至 PC
char buffer[50];
sprintf(buffer, "Sensor Value: %d\r\n", adcValue);
HAL_UART_Transmit(&huart1, (uint8_t*)buffer, strlen(buffer), 100);
HAL_Delay(500); // 每隔 500ms 更新一次数据
}
}
}
/**
* @brief ADC1 Initialization Function
*/
static void MX_ADC1_Init(void)
{
ADC_ChannelConfTypeDef sConfig = {0};
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = DISABLE; // 不启用扫描模式
hadc1.Init.ContinuousConvMode = DISABLE; // 关闭连续转换模式
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
HAL_ADC_Init(&hadc1);
sConfig.Channel = ADC_CHANNEL_0; // 通道 0 对应 PA0
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
/**
* @brief USART1 Initialization Function
*/
static void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 9600;
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;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
HAL_UART_Init(&huart1);
}
```
上述代码实现了以下功能:
- 利用 `HAL_ADC_Start` 函数启动 ADC 转换。
- 将获取到的 ADC 值通过 `sprintf` 格式化成字符串形式。
- 使用 `HAL_UART_Transmit` 函数经由串口发送数据到上位机终端软件中显示。
---
#### 测试方法
完成以上操作后,在电脑端安装 Tera Term 或者 PuTTY 类似的串口助手工具,打开对应 COM 口并设置好相同的波特率参数即可看到来自 STM32 的实时传感数据流。
---
阅读全文
相关推荐
















