光敏电阻传感器在stm32f103c8t6的测试代码
时间: 2023-05-25 11:03:55 浏览: 122
以下是光敏电阻传感器在stm32f103c8t6的测试代码:
```
#include "stm32f10x.h"
#include "delay.h" // 延时函数
#include "usart.h" // 串口通信函数
#define ADC_CHANNEL ADC_Channel_1 // ADC通道
#define ADC_GPIO GPIOA // ADC引脚所属GPIO
#define ADC_GPIO_PIN GPIO_Pin_1 // ADC引脚
#define ADC_RCC_GPIO RCC_APB2Periph_GPIOA // ADC引脚所属GPIO时钟
void initADC(void); // 初始化ADC
uint16_t getADCValue(void); // 获取ADC值
int main(void)
{
uint16_t adcValue; // 存放ADC值
float voltage; // 存放电压值
delay_init(); // 初始化延时函数
usart_init(9600); // 初始化串口通信
initADC(); // 初始化ADC
while (1)
{
adcValue = getADCValue(); // 获取ADC值
voltage = 3.3 * adcValue / (float)4095; // 计算电压
printf("ADC Value : %d\r\n", adcValue);
printf("Voltage : %.2f V\r\n", voltage);
printf("\r\n");
delay_ms(500); // 延时500毫秒
}
}
void initADC(void)
{
ADC_InitTypeDef adc_init; // 定义ADC初始化结构体
// 使能GPIO时钟
RCC_APB2PeriphClockCmd(ADC_RCC_GPIO, ENABLE);
// 配置ADC通道所属GPIO引脚
GPIO_InitTypeDef gpio_init;
gpio_init.GPIO_Pin = ADC_GPIO_PIN;
gpio_init.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(ADC_GPIO, &gpio_init);
// 使能ADC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
// ADC初始化配置
ADC_StructInit(&adc_init);
adc_init.ADC_Mode = ADC_Mode_Independent; // 独立模式
adc_init.ADC_ScanConvMode = DISABLE; // 不扫描
adc_init.ADC_ContinuousConvMode = DISABLE; // 单次转换模式
adc_init.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 转换不受外部触发
adc_init.ADC_DataAlign = ADC_DataAlign_Right; // 采集数据右对齐
adc_init.ADC_NbrOfChannel = 1; // 转换通道数
ADC_Init(ADC1, &adc_init);
// 配置ADC通道
ADC_RegularChannelConfig(ADC1, ADC_CHANNEL, 1, ADC_SampleTime_239Cycles5);
// ADC使能
ADC_Cmd(ADC1, ENABLE);
// ADC复位校准寄存器
ADC_ResetCalibration(ADC1);
// 等待ADC复位校准寄存器完成
while (ADC_GetResetCalibrationStatus(ADC1));
// ADC进行校准
ADC_StartCalibration(ADC1);
// 等待ADC校准完成
while (ADC_GetCalibrationStatus(ADC1));
}
uint16_t getADCValue(void)
{
ADC_SoftwareStartConvCmd(ADC1, ENABLE); // 开始转换
// 等待转换完成
while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
return ADC_GetConversionValue(ADC1); // 获取ADC值
}
```
这段代码通过ADC检测光敏电阻传感器的光敏电阻值并输出到串口。具体过程是先设置ADC通道和GPIO引脚,然后初始化ADC,然后进入循环进行ADC采样并计算电压值,最后将结果输出到串口。其中,getADCValue函数用于获取ADC值。
阅读全文