stm32f103c8t6测量正弦波幅值标准库代码
时间: 2025-05-21 19:34:05 浏览: 16
### 使用 STM32F103C8T6 标准库测量正弦波幅值
为了实现使用 STM32F103C8T6 的标准库来测量正弦波的幅值,可以采用 ADC 转换来获取输入信号的采样值,并通过软件算法计算其最大值和最小值之间的差值的一半作为幅值。以下是具体的实现方法:
#### 1. 初始化 ADC
配置 ADC 模块以采集模拟信号。STM32F103C8T6 提供多个 ADC 输入通道,可以根据实际硬件连接选择合适的通道。
```c
#include "stm32f10x.h"
void ADC_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
// 启用 ADC 和 GPIOA 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);
// 配置 PA0 为模拟输入模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // 设置为模拟输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置 ADC1
ADC_DeInit(ADC1);
ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 单通道转换
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // 连续转换模式
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 数据右对齐
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 不使用外部触发
ADC_InitStructure.ADC_NbrOfChannel = 1; // 仅启用一个通道
ADC_Init(ADC1, &ADC_InitStructure);
// 启用 ADC1
ADC_Cmd(ADC1, ENABLE);
// 校准 ADC
ADC_ResetCalibration(ADC1); // 复位校准寄存器
while (ADC_GetResetCalibrationStatus(ADC1)); // 等待复位完成
ADC_StartCalibration(ADC1); // 开始校准
while (ADC_Get CalibrationStatus(ADC1)); // 等待校准完成
}
```
#### 2. 获取 ADC 值并计算幅值
通过循环读取 ADC 值,记录最大值和最小值。最终可以通过 `(max_value - min_value) / 2` 计算得到正弦波的幅值。
```c
uint16_t max_value = 0;
uint16_t min_value = 4095; // 初始设为最大可能值
float amplitude = 0.0;
void MeasureAmplitude(void) {
uint16_t adc_value;
for (int i = 0; i < 1000; i++) { // 采集 1000 次样本
adc_value = ADC_GetConversionValue(ADC1); // 获取当前 ADC 值
if (adc_value > max_value) {
max_value = adc_value;
}
if (adc_value < min_value) {
min_value = adc_value;
}
}
amplitude = ((float)(max_value - min_value)) / 2.0; // 计算幅值
}
// 主函数调用初始化和测量过程
int main(void) {
ADC_Init(); // 初始化 ADC
while (1) {
MeasureAmplitude();
printf("Amplitude: %.2f\n", amplitude); // 输出幅值到串口调试工具
}
}
```
以上代码实现了基于 STM32F103C8T6 标准库的正弦波幅值测量功能[^1]。需要注意的是,ADC 的分辨率决定了测量精度,而采样的频率应满足奈奎斯特采样定理的要求,即至少两倍于被测信号的最大频率[^4]。
---
###
阅读全文
相关推荐













