你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
每日签到
STM32团队2
论坛吐槽优化专区
升级测试
ST意法半导体中文论坛
»
论坛
›
【技术区】
›
ST开发工具
›
cubeMAX配置双通道ADC+dma(二)定时器触发 ...
返回列表
查看:
1868
|
回复:
0
[STM32F446]
cubeMAX配置双通道ADC+dma(二)定时器触发
[复制链接]
数码小叶
数码小叶
当前离线
在线时间
886 小时
UID
3054195
ST金币
0
蝴蝶豆
61
注册时间
2014-8-21
52
主题
3313
回帖
61
蝴蝶豆
论坛元老
最后登录
2020-12-9
收听TA
发消息
发表于 2018-11-14 22:27:17
|
显示全部楼层
|
阅读模式
a0a.1 32b0c
本帖最后由 数码小叶 于 2018-11-14 22:27 编辑
虽然在上一篇中已经实现了ADC的采集,但是在实际应用中还是有很大的缺陷,那就是采样率,太高了,实际需求是几十Hz,所以还得采用定时器来。
试了很多配置,最后成功了两组,一组是定时器中断函数里触发ADC,一组是定时器直接触发ADC,不涉及中断函数。
第一组方法有很多种,只要产生中断就可以了,可以是普通定时中断,比较中断,pwm中断。。。。
参考第一篇,知道这里ADC的配置要做更改
然后选择触发源
然后打开定时器时钟,内部时钟
接下来配置定时器
这里的参数完全根据自己的时间需要来更改。
首先参考F446的时钟树,但是F446的时钟树描述的并不是很详细,参考下面的小字描述
其实这个就是和cubeMax配置界面相对应的
但是到这还是看不出TIM2挂在哪个总线上了,还得继续往下
到这就可以了,挂载在APB1上(同时可以发现TIM1和TIM8挂载在更高速的APB2上)
再看TIM2的分频寄存器描述
所以这里分频89+1,90,即
90MHz/(89+1)
最后是
1MHz,然后由计数周期确定最后频率,这里为20Hz。
保存,生成工程,打开,添加两句启动代码:
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_Value, 2);
HAL_TIM_Base_Start_IT(&htim2 );
复制代码
如果用定时器,根据自己的中断类型选择相应的处理函数,比如我用的
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
HAL_ADC_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_Value, 2);
// printf("Time is out");
}
复制代码
具体用哪个,已经在void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)里写的很详细了
最后,利用串口输出结果
<
回复
使用道具
举报
返回列表
浏览过的版块
STM32
STM8
活动专区
其他
公告&建议
签到区
板卡交易
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表