概述本章stm32cubemx配置stm32f103,并且在gd32f303中进行开发,同时通过gd32303c_start开发板内进行验证。需要gd样片的可以加q_qun申请:615061293。 本章主要配置,双adc轮询模式扫描多个通道,通过串口进行打印。 查阅手册可以得知,pa9、pa10为串口0的输出和输入口。
adc通道配置adc1in0(pa0)in3(pa3)in4(pa4)
adc2 in7(pa7) in8(pb0) in9(pb1)
生成例程这里准备了gd32303c_start开发板进行验证。
stm32cubemx配置 勾选中断。
adc1配置。
adcs_common_settings:mode:independent mod 独立 adc 模式,当使用一个 adc 时是独立模式,使用两个 adc 时是双模式,在双模式下还有很多细分模式可选,具体配置 adc_cr1:dualmod 位。adc_settings:data alignment:right alignment 转换结果数据右对齐,一般我们选择右对齐模式。left alignment 转换结果数据左对齐。scan conversion mode:disabled 禁止扫描模式。如果是单通道 ad 转换使用 disable。enabled 开启扫描模式。如果是多通道 ad 转换使用 enable。continuous conversion mode:disabled 单次转换。转换一次后停止需要手动控制才重新启动转换。enabled 自动连续转换。discontinuousconvmode:disabled 禁止间断模式。这个在需要考虑功耗问题的产品中很有必要,也就是在某个事件触发下,开启转换。enabled 开启间断模式。adc_regular_conversionmode:enable regular conversions 是否使能规则转换。number of conversion adc转换通道数目,有几个写几个就行。external trigger conversion source 外部触发选择。这个有多个选择,一般采用软件触发方式。rank:channel adc转换通道sampling time 采样周期选择,采样周期越短,adc 转换数据输出周期就越短但数据精度也越低,采样周期越长,adc 转换数据输出周期就越长同时数据精度越高。adc_injected_conversionmode:enable injected conversions 是否使能注入转换。注入通道只有在规则通道存在时才会出现。watchdog:enable analog watchdog mode 是否使能模拟看门狗中断。当被 adc 转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断。adc2配置。 生成独立的文件。
keil配置microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 c 库少,并且根本不具备某些 iso c 特性。 某些库函数的运行速度也比较慢,如果要使用printf(),必须开启。
代码在main.c中,添加头文件,若不添加会出现 identifier file is undefined报错。
/* user code begin includes */#include stdio.h/* user code end includes */函数声明和串口重定向:
/* user code begin pfp */int fputc(int ch, file *f){ hal_uart_transmit(&huart1 , (uint8_t *)&ch, 1, 0xffff); return ch;}/* user code end pfp */定义变量,存放采集到的数据。
/* user code begin 0 */uint8_t i;uint16_t adc1buf[3];//adc1数组uint16_t adc2buf[3];//adc2数组/* user code end 0 */adc校准。
/* user code begin 2 */ hal_adcex_calibration_start(&hadc1); //adc校准 hal_adcex_calibration_start(&hadc2); //adc校准 printf(adc demo!); /* user code end 2 */采集数据。
/* user code begin while */ while (1) { /* user code end while */ /* user code begin 3 */ i=0; while(i<3) { hal_adc_start(&hadc1);//启动adc hal_adc_pollforconversion(&hadc1,0xffff);//表示等待转换完成,第二个参数表示超时时间,单位ms. //hal_adc_getstate(&hadc1)为换取adc状态,hal_adc_state_reg_eoc表示转换完成标志位,转换数据可用。 if(hal_is_bit_set(hal_adc_getstate(&hadc1),hal_adc_state_reg_eoc))//就是判断转换完成标志位是否设置,hal_adc_state_reg_eoc表示转换完成标志位,转换数据可用 { //读取adc转换数据,数据为12位。查看数据手册可知,寄存器为16位存储转换数据,数据右对齐,则转换的数据范围为0~2^12-1,即0~4095. adc1buf[i]=hal_adc_getvalue(&hadc1); i++; } } printf(adc1_in0(pa0)=%4.0d,电压=%1.4f,adc1buf[0],adc1buf[0]*3.3f/4095); printf(adc1_in3(pa3)=%4.0d,电压=%1.4f,adc1buf[1],adc1buf[1]*3.3f/4095); printf(adc1_in4(pa4)=%4.0d,电压=%1.4f,adc1buf[2],adc1buf[2]*3.3f/4095); hal_adc_stop(&hadc1); hal_delay(500); i=0; while(i<3) { hal_adc_start(&hadc2);//启动adc hal_adc_pollforconversion(&hadc2,0xffff);//表示等待转换完成,第二个参数表示超时时间,单位ms. //hal_adc_getstate(&hadc1)为换取adc状态,hal_adc_state_reg_eoc表示转换完成标志位,转换数据可用。 if(hal_is_bit_set(hal_adc_getstate(&hadc2),hal_adc_state_reg_eoc))//就是判断转换完成标志位是否设置,hal_adc_state_reg_eoc表示转换完成标志位,转换数据可用 { //读取adc转换数据,数据为12位。查看数据手册可知,寄存器为16位存储转换数据,数据右对齐,则转换的数据范围为0~2^12-1,即0~4095. adc2buf[i]=hal_adc_getvalue(&hadc2); i++; } } printf(adc2_in7(pa7)=%4.0d,电压=%1.4f,adc2buf[0],adc2buf[0]*3.3f/4095); printf(adc2_in8(pb0)=%4.0d,电压=%1.4f,adc2buf[1],adc2buf[1]*3.3f/4095); printf(adc2_in9(pb1)=%4.0d,电压=%1.4f,adc2buf[2],adc2buf[2]*3.3f/4095); hal_adc_stop(&hadc2); hal_delay(500); } /* user code end 3 */测试结果输入固定电压进行测试。
adc1in0(pa0)in3(pa3)in4(pa4)
输入电压 vcc 2.0v gnd
adc2 in7(pa7) in8(pb0) in9(pb1)
输入电压 vcc gnd 2.0v
测试结果如下。
瑞科慧联完成千万Pre-A轮,智能家居布局将全面开启
联发科前COO真诚谈从事芯片行业20多年以来的成功案例与失败经验
IMX6 L3035编译手册
国外新闻 Siri创始人称苹果没开放语音助手是错误 特斯拉需要职业经理人
3D Touch原理及发展瓶颈分析
STM32CUBEMX开发GD32F303(10)----双ADC轮询模式扫描多个通道
乐Pro3和努比亚M2哪个最好
灌盐水就能跑1000KM的超跑 特斯拉怕不怕?
STM32MP157A-DK1开发板评测
西门子S7-1200PLC的四种定时器指令
三星计划2021年量产GAA电晶体
中国AMOLED面板产能逐渐释放,推动产业生态链快速发展
智能魔镜有什么作用,一面可以教你健身的镜子
汇付天下与微盟合作,对支付行业的启迪是什么?
关于配酸装置操作的详细说明
能够取代用于尖端活检技术手术刀的激光技术
PLC信号出错一般是什么导致的?
变频负载分类以及变频选型原则
组装电脑的主板上那些插槽接口都是什么
Logic-Level Signals Dim -48V L