你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F4 颜色传感器

[复制链接]
胡小侃 提问时间:2021-11-11 17:24 / 未解决

各位大佬好。

刚接触单片机,现在需要实现以下逻辑:

1.发送12个周期为500ns的脉冲(高电平200ns,低电平300ns),每隔4us发送一次,共计三次(36个脉冲,每12个脉冲之间间隔4us)

2.在第一步每段12个脉冲发送的上升沿时,读取GPIO口数据,共计12个bit,三次共计36个bit。

时序图如下:

捕获.PNG

我现在处理方式如下:

开发环境:STM32F407RC,CubeMx,IAR

使用Tim1的ch1用来发送PWM(周期为500ns),同时使用Tim1来驱动DMA来读取Dout的数据,然后使用从定时器Tim3来计12次数,12次到达后进入中断,停止发送PWM和DMA,等候4us后继续,以此做三次。

问题:

周期为500ns的情况下,无法保证每次都是12次停止,9次,10次,14次等,会乱掉,周期调到us级没有问题。

如果关掉DMA,只发送PWM的话,是可以按照12次计数停止。

小弟第一次做单片机,怀疑是使用库HAL库函数对定时器有一定的影响?还是整个开发方向都是错误的。以上,希望各位大佬解惑~

收藏 评论3 发布时间:2021-11-11 17:24

举报

3个回答
胡小侃 回答时间:2021-11-16 12:50:19

通过寄存器配置主从time完美解决这个问题。

butterflyspring 回答时间:2021-11-17 11:23:52
胡小侃 发表于 2021-11-16 12:50</dt>
<dt>通过寄存器配置主从time完美解决这个问题。</dt>
<dt>

)这个思路不错,有时间的话可以分享一下具体思路就更好了

胡小侃 回答时间:2021-11-17 14:55:10

butterflyspring 发表于 2021-11-17 11:23
这个思路不错,有时间的话可以分享一下具体思路就更好了

最初一直都是用CubeMx来配置主从定时器,主定时器Tim1用来发送PWM和读取DMA,从Tim3用来控制脉冲次数。手册上关于主从定时器是没有指明谁是主从,所以通过修改寄存器的方式,把Tim3改为主,Tim1改为从,同时要启用Tim3的PWM方式,这样就得到想要的结果了。(也是在公司领导的帮助下改成功的,小弟第一次接触单片机~)

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版