stm32f103c8t6最小系统板定时器,定时1s上传传感器数据到WIFI
时间: 2025-06-13 09:09:42 浏览: 11
### 配置 STM32F103C8T6 使用定时器上传传感器数据
#### 硬件连接
为了使 STM32F103C8T6 能够通过 WiFi 模块传输数据,需建立两者之间的通信接口。通常采用 UART 接口进行串行通信[^1]。
- **STM32F103C8T6 和 WiFi 模块**
- 将 STM32 的 TXD (USART_TX) 连接到 ESP8266/ESP32 的 RXD。
- 将 STM32 的 RXD (USART_RX) 连接到 ESP8266/ESP32 的 TXD。
- GND 引脚共地连接。
对于传感器的数据采集部分,则依据具体使用的传感器型号来决定其与 MCU 的接线方式;比如 IIC 或者 SPI 协议的传感器则按照对应协议规定的方式连线即可。
#### 定时器初始化设置
利用 TIM2 实现周期性的中断触发事件,在 HAL 库下完成如下操作:
```c
// 初始化TIM2定时器函数定义
static void MX_TIM2_Init(void)
{
__HAL_RCC_TIM2_CLK_ENABLE(); // 开启TIM2时钟
TIM_HandleTypeDef htim2;
htim2.Instance = TIM2;
htim2.Init.Prescaler = SystemCoreClock / 1000000 - 1; // 设置预分频系数,72MHz/(SystemCoreClock/1000000)=1us计数一次
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 999; // 自动重装载值设为999(即1ms),因为要达到1s所以需要累计1000次这样的间隔
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if(HAL_TIM_Base_Init(&htim2)!= HAL_OK){
Error_Handler();
}
}
```
上述代码片段实现了对 TIM2 的基础配置并启动该外设工作于向上计数模式,同时设置了合适的预分配比例使得每次溢出代表一毫秒的时间流逝。
接着还需要编写一个回调处理程序用于响应定时器产生的更新事件,并在此处加入发送指令给 Wi-Fi 模块以及读取传感器数值的动作逻辑:
```c
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static uint16_t count=0;
if(htim->Instance==TIM2){
count++;
if(count>=1000){
SendDataToWiFiModule(); // 发送数据到Wi-Fi模块
ReadSensorValue(); // 获取当前时刻传感器测量结果
count=0; // 清零计数器等待下一个完整的秒钟到来
}
}
}
```
此段 C 语言源码展示了当检测到 TIM2 计数结束时所采取的行为——每当累积满一千个单位时间(也就是一秒),便会调用 `SendDataToWiFiModule()` 函数向联网组件传递信息的同时也执行 `ReadSensorValue()` 来获取最新的传感参数值。
最后记得开启全局中断允许标志位以便能够正常接收来自硬件层面上报来的各种异常情况报告或者状态改变通知等消息。
```c
__enable_irq();
HAL_NVIC_SetPriority(TIM2_IRQn, 0, 1);
HAL_NVIC_EnableIRQ(TIM2_IRQn);
```
以上就是关于如何让 STM32F103C8T6 基板借助内置定时装置定期收集环境变量并向无线网络端推送这些资料的整体解决方案介绍。
阅读全文
相关推荐


















