GD32F303固件库开发.10----双ADC轮询模式扫描多个通道

  • 概述
  • 视频教学
  • csdn课程
  • 样品申请
  • 硬件准备
  • keil配置
  • 使能串口
  • 串口重定向
  • ADC通道设置
  • ADC0初始化
  • ADC0配置
  • ADC1初始化
  • ADC1配置
  • ADC数据采集
  • 最后
  • 数据采集
  • 测试结果

概述

本章主要配置,双ADC轮询模式扫描多个通道,通过串口进行打印。
查阅手册可以得知,PA9、PA10为串口0的输出和输入口。
查阅手册可以得知,PA9、PA10为串口0的输出和输入口。需要GD样片的可以加Q_qun申请:6_15061293 。

视频教学

GD32F303固件库开发(10)----双ADC轮询模式扫描多个通道

https://www.bilibili.com/video/BV1N94y1D7Yh/

csdn课程

课程更加详细。
https://download.csdn.net/course/detail/37144

样品申请

https://www.wjx.top/vm/wFGhGPF.aspx#

硬件准备

这里准备了1块开发板进行验证,分别是GD32303C_START开发板。

keil配置

microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。 某些库函数的运行速度也比较慢,如果要使用printf(),必须开启。

使能串口

  /* 使能GPI0A,用PA9、PA10为串口 */rcu_periph_clock_enable(RCU_GPIOA);/*使能串口0的时钟 */rcu_periph_clock_enable(RCU_USART0);/*配置USARTx_Tx(PA9)为复用推挽输出*/gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);/*配置USARTx_RxPA9)为浮空输入 */gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);/* USART 配置 */usart_deinit(USART0);//重置串口0usart_baudrate_set(USART0, 115200U);//设置串口0的波特率为115200usart_word_length_set(USART0, USART_WL_8BIT);         // 帧数据字长usart_stop_bit_set(USART0, USART_STB_1BIT);              // 停止位1位usart_parity_config(USART0, USART_PM_NONE);          // 无奇偶校验位usart_receive_config(USART0, USART_RECEIVE_ENABLE);//使能接收器usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);//使能发送器usart_enable(USART0);//使能USART

串口重定向

/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{usart_data_transmit(USART0, (uint8_t)ch);while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));return ch;
}

串口重定向后就可以使用printf进行打印。

ADC通道设置


ADC0初始化


///*************时钟配置******************//*使能GPIOA时钟 */rcu_periph_clock_enable(RCU_GPIOA);/*使能ADC时钟 */rcu_periph_clock_enable(RCU_ADC0);/* 配置ADC速率 */rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);

ADC0配置

/*------------------ADC GPIO配置------------------*/
// 必须为模拟输入gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_MAX, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2);/*------------------ADC工作模式配置------------------*/// 设置adc工作在独立模式adc_mode_config(ADC_MODE_FREE);// 多通道用扫描模式//    adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);// 单通道用连续转换模式
//      adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);// 结果转换右对齐adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);// 转换通道1个adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 3);/* ADC regular channel config */adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_55POINT5);adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_1, ADC_SAMPLETIME_55POINT5);adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5);// 不用外部触发转换,软件开启即可adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);// 使能ADCadc_enable(ADC0);delay_1ms(1);                                                   // 等待1ms// 使能ADC校准adc_calibration_enable(ADC0);

ADC1初始化

/*************时钟配置******************//*使能GPIOA时钟 */rcu_periph_clock_enable(RCU_GPIOB);/*使能ADC时钟 */rcu_periph_clock_enable(RCU_ADC1);/* 配置ADC速率 */rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);

ADC1配置

/*------------------ADC GPIO配置------------------*/
// 必须为模拟输入gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_MAX, GPIO_PIN_7);gpio_init(GPIOB, GPIO_MODE_AIN, GPIO_OSPEED_MAX, GPIO_PIN_0 | GPIO_PIN_1);
/*------------------ADC工作模式配置------------------*/// 设置adc工作在独立模式adc_mode_config(ADC_MODE_FREE);// 多通道用扫描模式//    adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);// 单通道用连续转换模式
//      adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);// 结果转换右对齐adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);// 转换通道1个adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 3);/* ADC regular channel config */adc_regular_channel_config(ADC1, 0, ADC_CHANNEL_7, ADC_SAMPLETIME_55POINT5);adc_regular_channel_config(ADC1, 1, ADC_CHANNEL_8, ADC_SAMPLETIME_55POINT5);adc_regular_channel_config(ADC1, 2, ADC_CHANNEL_9, ADC_SAMPLETIME_55POINT5);// 不用外部触发转换,软件开启即可adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE);// 使能ADCadc_enable(ADC1);delay_1ms(1);                                                   // 等待1ms// 使能ADC校准adc_calibration_enable(ADC1);

ADC数据采集

uint16_t  get_adc(uint32_t adc_periph , uint8_t adc_channel)
{
/* 配置规则通道采集*/adc_regular_channel_config(adc_periph, 0, adc_channel, ADC_SAMPLETIME_55POINT5);// 由于没有采用外部触发,所以使用软件触发ADC转换adc_software_trigger_enable(adc_periph, ADC_REGULAR_CHANNEL);   while(!adc_flag_get(adc_periph, ADC_FLAG_EOC));                       // 等待采样完成adc_flag_clear(adc_periph, ADC_FLAG_EOC);                             // 清除结束标志return  adc_regular_data_read(adc_periph);                         // 读取ADC数据
}

最后

以上的代码会在Q_qun里分享。QQ_qun:615061293。
或者关注『记帖』,持续更新文章和学习资料!

数据采集

    while (1){uint16_t adc0Value0 = 0;uint16_t adc0Value1 = 0;uint16_t adc0Value2 = 0;adc0Value0=get_adc(ADC0 ,ADC_CHANNEL_0);adc0Value1=get_adc(ADC0 ,ADC_CHANNEL_1);adc0Value2=get_adc(ADC0 ,ADC_CHANNEL_2);printf("\nadc0_IN0(PA0)=%4.0d,电压=%1.4f",adc0Value0,adc0Value0*3.3f/4095);printf("\nadc0_IN1(PA1)=%4.0d,电压=%1.4f",adc0Value1,adc0Value1*3.3f/4095);printf("\nadc0_IN2(PA2)=%4.0d,电压=%1.4f",adc0Value2,adc0Value2*3.3f/4095);uint16_t adc1Value0 = 0;uint16_t adc1Value1 = 0;uint16_t adc1Value2 = 0;adc1Value0=get_adc(ADC1 ,ADC_CHANNEL_7);adc1Value1=get_adc(ADC1 ,ADC_CHANNEL_8);adc1Value2=get_adc(ADC1 ,ADC_CHANNEL_9);printf("\nadc1_IN7(PA7)=%4.0d,电压=%1.4f",adc1Value0,adc1Value0*3.3f/4095);printf("\nadc1_IN8(PB0)=%4.0d,电压=%1.4f",adc1Value1,adc1Value1*3.3f/4095);printf("\nadc1_IN9(PB1)=%4.0d,电压=%1.4f",adc1Value2,adc1Value2*3.3f/4095);delay_1ms(1000);                   }

测试结果

输入固定电压进行测试。


测试结果如下。

GD32F303固件库开发(10)----双ADC轮询模式扫描多个通道相关推荐

  1. STM32CUBEMX开发GD32F303(10)----双ADC轮询模式扫描多个通道

    概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过GD32303C_START开发板内进行验证.需要GD样片的可以加Q_QUN申请:615061293. ...

  2. GD32F303固件库开发

    GD32F303固件库开发 芯片申请 GD32F303固件库开发(1)----前期准备与烧录 GD32F303固件库开发(2)----读保护与写保护 GD32F303固件库开发(3)----使用固件库 ...

  3. GD32F303固件库开发(11)----ADC在DMA模式下扫描多个通道

    GD32F303固件库开发.11----双ADC轮询模式扫描多个通道 概述 视频教学 csdn课程 样品申请 硬件准备 keil配置 使能串口 串口重定向 ADC通道设置 DMA设置 ADC0初始化 ...

  4. GD32F303固件库开发(16)----移植兆易创新SPI Nor Flash之GD25Q64Flash

    spi概述 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的 ...

  5. GD32F303固件库开发(14)----IIC之配置OLED

    GD32F303固件库开发.13----定时器TIM捕获PWM测量频率与占空比 概述 视频教学 csdn课程 参考文档 时钟使能 初始化IO IIC初始化 配置IIC接口 修改IIC发送代码 OLED ...

  6. GD32F303固件库开发(7)----printf打印配置

    GD32F303固件库开发.7----printf打印配置 概述 视频教学 csdn课程 样品申请 硬件准备 keil配置 串口初始化 最后 串口重定向 打印测试 测试结果 概述 本章主要配置prin ...

  7. GD32F303固件库开发(5)----GPIO输出模式,速率测试、开漏和输出说明

    GD32F303固件库开发.5----GPIO输出模式,速率测试.开漏和输出说明 概述 样品申请 视频教学 csdn课程 硬件准备 开发板管脚配置 不同速率对应的波形 GPIO_OSPEED_2MHZ ...

  8. GD32F303固件库开发(13)----定时器TIM捕获PWM测量频率与占空比

    GD32F303固件库开发.13----定时器TIM捕获PWM测量频率与占空比 概述 视频教学 csdn课程 样品申请 生成例程 keil配置 使能串口 串口重定向 占空比与频率计算 GPIO初始化 ...

  9. GD32F303固件库开发(17)----内部Flash读写

    概述 本例程主要讲解如何对芯片自带Flash进行读写,用芯片内部Flash可以对一些需要断电保存的数据进行保存,无需加外部得存储芯片,本例程采用的是GD32F303ZET6主控,512K大小的Flas ...

最新文章

  1. U盘安装Ubuntu14.4时遇到分区问题记录
  2. SAP S4HANA Buiness Partner名词解析
  3. caffe windows学习:第一个测试程序
  4. 【转】C# 调用 C++ 数据转换
  5. Qt Designer的信号和插槽编辑模式
  6. 深圳php和java,深圳java技术培训学习(Java和PHP区别)
  7. Kotlin学习笔记 第二章 类与对象 第十节 内部类嵌套类
  8. python删除特定字符串之后的,如何删除字符串中某个字符后的所有内容?
  9. 【C语言】模块化编程-通俗易懂
  10. paypal如何支付欧元_Paypal怎么付欧元
  11. AcWing 4071. 国际象棋
  12. 壳聚糖载抗生素水凝胶/接枝Nogo-A抗体的温敏型壳聚糖水凝胶/巯基化壳聚糖水凝胶的制备
  13. 抛物线公式即辛卜生(Simpson)公式的数值积分的Python程序
  14. Cheat Enginee(CE)的详细使用指南~包含下载安装教程以及核心功能讲解
  15. zk-snark的算法详解
  16. excel设置自动排序123的详细教程
  17. Spring官宣,干掉原生 JVM!硬气啊!
  18. 如何选择最好的研究方法?——Nvivo教程
  19. Dos窗口的打开方式及其常用命令
  20. java编写的浏览器_Java编写简单的网页浏览器

热门文章

  1. form表单的onsubmit事件中调用方法时为什么前面加return
  2. java解析rar压缩包兼容rar4
  3. 信号阻塞器QSignalBlocker的用法
  4. 乐S3 乐视X622 乐视X626_官方线刷包_救砖包_解账户锁
  5. 照片滤镜处理软件CameraBag Pro for Mac
  6. mysql runoob_MYSQL 学习
  7. c语言文件写入函数有哪些,c语言文件读写函数有哪些?
  8. 【Net】StreamWriter.Write 的一点注意事项
  9. 同时为多个竖屏视频加背景图变成横屏的视频
  10. linux系统中pwd命令的作用,Linux运维pwd命令有什么用途?linux系统