600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【从0到1搭建LoRa物联网】10 LoRa终端ASR6505 ADC采样

【从0到1搭建LoRa物联网】10 LoRa终端ASR6505 ADC采样

时间:2022-07-12 03:53:32

相关推荐

【从0到1搭建LoRa物联网】10 LoRa终端ASR6505 ADC采样

系列文章:

【从0到1搭建LoRa物联网】1、LoRa物联网的架构

【从0到1搭建LoRa物联网】2、终端设备开发方式

【从0到1搭建LoRa物联网】3、国产LoRa终端ASR6505软硬件

【从0到1搭建LoRa物联网】4、国产LoRa终端ASR6505普通GPIO

【从0到1搭建LoRa物联网】5、国产LoRa终端ASR6505驱动DHT11

【从0到1搭建LoRa物联网】6、国产LoRa终端ASR6505 I2C接口

【从0到1搭建LoRa物联网】7、国产LoRa终端ASR6505驱动段式LCD例程

【从0到1搭建LoRa物联网】8、国产LoRa终端ASR6505 PingPong通信

【从0到1搭建LoRa物联网】9、国产LoRa终端ASR6505 PingPong通信OLED显示

1、前言

ADC的采样范围是0-VCC,因此加在输入通道的电压不能超过VCC。

ADC通道说明

2、ADC通道说明

只有1个ADC外设,预留了3个通道供使用,开发板中H3针脚正是引出的ADC通道。

与STM8L的对应如下:

ASR6505 STM8

IN0 PC2(ADC1_IN6)

IN1 PC3(ADC1_IN5) IN2 PC7(ADC1_IN3)

3、ADC参考电压

VREFP引脚:是ADC参考电压的输入引脚,即就是开发板上的P4跳线帽,插上P4跳线帽就表示用VCC当做参考电压。

芯片内部参考电压:

可以看出,典型值为1.224V,因此我们采样的时候就以这个为参考来校准其他通道的采样值。

4、实验设计

间隔5s读取ASR6505的ADC的内部参考电压通道以及通道0的值,并转化成电压值通过串口打印。分别把VCC和GND输入到通道0。

5、代码实现

periph_adc.h/c部分代码:

#define ASR6505_CH_IN0 ADC_Channel_6#define ASR6505_CH_IN1 ADC_Channel_5#define ASR6505_CH_IN2 ADC_Channel_3#define ASR6505_PIN_IN0PC_2#define ASR6505_PIN_IN1PC_3#define ASR6505_PIN_IN2PC_7

Gpio_t AdcIn0;void ADC_PeriphInit(void){GpioInit( &AdcIn0, ASR6505_PIN_IN0, PIN_INPUT, PIN_PUSH_PULL, PIN_NO_PULL, 0);//初始化通道对应的io口}void ADC_ReadSensor(void){uint16_t adc_ref = 0,adc_data=0;float value=0;CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);//使能时钟//初始化ADCADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_1);ADC_Cmd(ADC1, ENABLE);//ADC通道设置ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_192Cycles);ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_192Cycles);ADC_VrefintCmd(ENABLE); //使能内部参考电压ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, ENABLE);//使能通道ADC_SoftwareStartConv(ADC1); //开始转化while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));//等待转化完成ADC_ClearFlag(ADC1 , ADC_FLAG_EOC); //清除标志位adc_ref = ADC_GetConversionValue(ADC1);//读取转化结果ADC_ChannelCmd(ADC1, ADC_Channel_Vrefint, DISABLE);//失能通道ADC_ChannelCmd(ADC1, ASR6505_CH_IN0, ENABLE);ADC_SoftwareStartConv(ADC1);while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));ADC_ClearFlag(ADC1 , ADC_FLAG_EOC);adc_data = ADC_GetConversionValue(ADC1);ADC_DeInit(ADC1);CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, DISABLE);value=(1.224*4096.0/adc_ref)*(adc_data/4096.0);printf("adc_ref=%d,adc_data=%d,value=%f\r\n",adc_ref,adc_data,value);}

主函数部分代码:

int main( void ){BoardInitMcu( );BoardInitPeriph( );printf("ASR6505 ADC test!\r\n");ADC_PeriphInit(); while(1){ADC_ReadSensor();printf("-------------------------------------------------- \r\n\r\n");Delay(5);}}

6、实验现象

欢迎关注微信公众号【物联网思考】,回复关键字“ASR6505”获取资料,《从0到1搭建LoRa物联网》系列的所有软硬件资料将会分享在公众号。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。