
中级技术员
 
- 积分
- 120
- 在线时间
- 8 小时
- 精华
- 0
- 注册时间
- 2020-8-30
- 最后登录
- 2021-2-26
|
AC7801的ADC太厉害了,12bit精度,1M采样率,支持DMA,多种采样模式……
然而7801内的例程使用了DMA, 对于刚入门的同学们就不是很好理解,简单的应用也不需要用到DMA。因此,实现了一个一次只采样1个通道,轮询采样结果,非常简单的一个小demo。
- /**
- * ADC0_init
- *
- * @param[in] void
- * [url=home.php?mod=space&uid=266161]@return[/url] void
- *
- * [url=home.php?mod=space&uid=247401]@brief[/url] ADC初始化
- *
- */
- void ADC0_init(void)
- {
- ADC_ConfigType adcConfig = {0};
- GPIO_SetFunc(GPIOA, GPIO_PIN7, GPIO_FUN2); ///<ADC_IN4 Analog function enable, PA7
- GPIO_SetFunc(GPIOA, GPIO_PIN8, GPIO_FUN2); ///<ADC_IN3 Analog function enable, PA8
- GPIO_SetFunc(GPIOA, GPIO_PIN2, GPIO_FUN2); ///<ADC_IN8 Analog function enable, PA2
- adcConfig.regularSequenceLength = 1;
- adcConfig.powerMode = ADC_POWER_ON;
- ADC_Init(ADC0, &adcConfig);
- }
复制代码 ADC的初始化,调用了驱动库中的ADC_Init(),adcConfig中多数变量采用默认值0,只是将规则组长度设置为1,并开启ADC电源。配置了采样引脚。采用其他引脚采样,需要自行更改引脚。
- /**
- * ADC_Convert
- *
- * @param[in] adcChl ADC通道,参考ADC_ChannelType
- * @return ad转换结果
- *
- * @brief 获取AD转换结果
- *
- */
- uint16_t ADC_Convert(ADC_ChannelType adcChl)
- {
- uint16_t adcRst = 0;
-
- ADC_SetRegularGroupChannel(ADC0, adcChl, ADC_SPT_CLK_215, 0); //采样&转换时间= (7+12)/24000000 + 5/24000000 = 1us
- ADC_SoftwareStartRegularConvert(ADC0); ///软件触发规则组采样
-
- while (0 == ADC_GetEOCFlag(ADC0)){
- }
-
- adcRst = ADC_GetRegularData(ADC0);
-
- return adcRst;
- }
复制代码 通过ADC_Convert() 函数,传入要转换的AD通道号, AD采样结束后返回AD转换结果。
- /**
- * main
- *
- * @param[in] void
- * @return 0
- *
- * @brief 主函数入口
- *
- */
- int main(void)
- {
- InitDelay();
- InitDebug();
-
- ADC0_init();
-
- printf("ADC convert sample.\r\n");
-
- while (1) {
- mdelay(500);
-
- printf("ADC convert result:%d\r\n", ADC_Convert(ADC_CH_8));
- }
- }
复制代码 测试代码将7801开发板上电位器电压采集下来并通过串口输出。
测试结果如下:
贡献测试代码给有需要的小伙伴
|
|