你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
每日签到
STM32团队2
论坛吐槽优化专区
升级测试
ST意法半导体中文论坛
»
论坛
›
【技术区】
›
ST开发工具
›
cubeMAX配置双通道ADC+dma(二)定时器触发 ...
返回列表
查看:
1863
|
回复:
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)里写的很详细了
最后,利用串口输出结果
回复
使用道具
举报
返回列表
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表