概述
cube配置,目前按网上说的多通道DMA+TIM中断触发,没法实现,Simulink生成的代码一直卡在DMA中断,而其他中断进不去,没查到原因。
取消DMA,用ADC中断,多通道的还是有问题,Simulink生成的代码中断可以正常进,但ADC采集的值不对,没查到原因。
最终只能用单通道,ADC中断,不连续采集,不用DMA,测试了ADC1和ADC2同时用的话,是可以的,采集的值没问题。本文就是采用的此方式。
如果有大佬成功实现过了DMA+TIM中断触发的simulink代码生成,欢迎指导小弟~~~
也欢迎在做STM32自动代码生成的童鞋与我交流~~
QQ/Wechat:9535909472
目录
CUBE配置:
时钟树配置:(最高时钟只有12M)
ADC配置:
Simulink模型建立:
测试效果:
附件
CUBE配置:
时钟树配置:(最高时钟只有12M)
ADC配置:
Mode Independent mode ADC1 和ADC2 工作在独立模式(如果只有ADC1的话,只能选独立模式)
Data Alignment ADC 数据向左边对齐还是向右边对齐(默认右对齐)
Scan Conversion Mode Disable 是否开启扫描模式(如果是多通道的话,只能选开启,单通道只能选不开启)
Continuous Conversion Mode Disable 是否开启连续转换(此处选择不开启,开启后会导致其他中断进不去)
Discontinuous Conversion Mode Disable 是否开启单次转换(单通道只能Disable,多通道可以选择Enable)
ADCs_Regular_ConversionMode (规则通道转换模式)
Enable Regular Conversions ENABLE启用定期转换
Number of Conversion ADC转换的通道数量 1 (单通道只能选择为1)
External Trigger Conversion Source by software 软件触发转换(可以选择TIM中的中断触发,但是Simulink中生成完的代码有问题,最终还是没用中断和DMA)
Rank 只有通道为2个以上时才可以开启扫描模式
Channel ADC转换通道 10
Sampling Time ADC采样周期 1.5cyces
ADC_Injected_ConversionMode (注入通道转换模式)暂时没用到。
WatchDog 暂时没用到。
转换时间=采样时间+12.5个周期 = 14个周期
由时钟树可知,ADC的频率为12M,得到转换时间为 14/12M = 1.17us
打开ADC中断:
ADC2配置和ADC1一样,此处不再叙述。
没有用DMA,所以CUBE的配置就这些。本工程是在之前一篇文章的基础上改的,其他配置参考上一篇文章。
Simulink模型建立:
模块库中找到ADC模块,我是将他放到500ms定时和1s定时中,一个ADC1,一个ADC2(配置同1)
此处的模块只负责读取ADC采样的值,采集和转换是一直在中断进行的。
我这里配置的是通道ADC1-通道10
CUBE中配置后,此处的中断是打开的,且不能修改。(关闭中断只能在cube中配置)
输入信号为12位精度的ADC值范围0-4095,电压范围0-3.3(本次用的开发板adc采集的电压最高只能到3.3v,如果要测5V,需要改硬件)
CHAR 转换模块在ADC Demo中有,如果找不到的话,可以参考我的工程。
ADC2和ADC1类似,只是放到了1s定时中断里面,然后在转换模块中加了个2,用于串口打印时区分。
到此模型建立完成,Ctrl+B生成代码,打开工程,编译,下载。
测试效果:
其他中断还可以正常触发,ADC采集也可以正常采集电压。
ADC1采集通道接电源,采集电压3.24v,ADC2采集通道接地,采集电压0V
ADC2采集通道接电源,采集电压3.25v,ADC1采集通道接地,采集电压0V
附件
CUBE工程,Simulink模型及生成的代码工程
最后
以上就是昏睡宝贝为你收集整理的STM32F103基于Simulink自动代码生成之ADC采集CUBE配置:Simulink模型建立:测试效果:附件的全部内容,希望文章能够帮你解决STM32F103基于Simulink自动代码生成之ADC采集CUBE配置:Simulink模型建立:测试效果:附件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复