stm32f103zet6光敏电阻串口
时间: 2025-05-06 08:05:09 浏览: 27
### STM32F103ZET6 光敏电阻与串口通信配置
#### 硬件连接说明
STM32F103ZET6 的 GPIO 可用于读取光敏电阻的模拟信号。通过 ADC 转换模块获取光敏电阻的电压值,并将其发送到 PC 或其他设备,利用 USART 进行串口通信。
硬件连接如下:
- 将光敏电阻的一端接到电源 (VCC),另一端接地 (GND) 并串联一个固定电阻形成分压电路。
- 使用 STM32 的 ADC 输入引脚(例如 PA0)来检测光敏电阻上的电压变化。
- 配置 USART 引脚(例如 PA9 和 PA10),分别作为 TX 和 RX 用于串口通信[^1]。
---
#### 初始化代码示例
以下是基于 HAL 库的初始化代码:
```c
#include "stm32f1xx_hal.h"
// 定义全局变量
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)
{
HAL_ADC_Start(&hadc1); // 启动ADC转换
HAL_ADC_PollForConversion(&hadc1, 100); // 等待转换完成
adcValue = HAL_ADC_GetValue(&hadc1); // 获取ADC值
char buffer[50];
sprintf(buffer, "Light 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)
{
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;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
Error_Handler(); // 错误处理函数
}
// 配置ADC通道
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel = ADC_CHANNEL_0; // 使用PA0作为输入
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
}
/**
* @brief USART1 Initialization Function
*/
static void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200; // 波特率设置为115200
huart1.Init.WordLength = UART_WORDLENGTH_8B;// 字符长度为8位
huart1.Init.StopBits = UART_STOPBITS_1; // 停止位为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;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
}
```
---
#### 参数解释
上述代码实现了以下功能:
1. **ADC 模块**:从光敏电阻采集模拟信号并转化为数字量 `adcValue`。
2. **UART 模块**:将采集的数据通过串口发送给外部设备。
3. **定时器延时**:每间隔 500 ms 执行一次采样和传输操作。
---
#### 注意事项
- 在实际应用中需注意光敏电阻的阻值范围以及供电电压的选择,以确保其工作在线性区域内。
- 如果使用更高分辨率的 ADC,则可能需要调整采样时间参数。
- 若波特率过高可能导致数据丢失,请根据具体应用场景合理选择波特率。
---
阅读全文
相关推荐


















