电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
gd32vf103之输入捕获最小配置
分 享
扫描二维码分享
gd32vf103之输入捕获最小配置
gd32
兆易创新
RISC-V
gcrisis
关注
发布时间: 2020-11-02
丨
阅读: 1482
![](https://cf02.ickimg.com/bbsimages/202011/4cff1f35b3d752171794164511324985.png) 输入捕获是处理器很有用的功能,它可以捕获信号,获取信号的周期、占空比等等。它是基于定时器的一个功能,使用它需要作如下的配置: **1、配置定时器; 2、通道配置; 3、打开中断和比较捕获功能; 4、打开定时器; 5、编写中断服务程序;** ### **1、配置定时器** 定时器的配置在上一篇文章已经介绍过了,大家可以查看[那篇文章](https://www.icxbk.com/article/detail?aid=1796 "那篇文章")。这里配置比较简单,包括预分频、计数方向、对齐模式、自动重载值。 ![](https://cf02.ickimg.com/bbsimages/202011/416cb9b9f6b2d74be599201863682574.png) 这里108分频后为1Mhz,65535大概是65.5ms。捕获的信号必须小于这个时间,否则就溢出了。如果被捕获的信号周期比这个大,就要增大预分频系数了。 ### **2、通道配置** 首先对输入捕获通道进行滤波设置,寄存器是通道控制寄存器0 (TIMERx_CHCTL0) ,它的各个位在输入或输出时作用有所不同。bit[7:4]是通道0输入滤波,bit[15:12]是通道1输入滤波。这里设置采样频率Fsamp等于定时器分频后的时钟频率Fpclk,N=2。 ![](https://cf02.ickimg.com/bbsimages/202011/2afb56cae31405da0803a437f5c22f10.png) ![](https://cf02.ickimg.com/bbsimages/202011/0913ff7ad89459c560edc953e946e57b.png) 下面配置信号的极性,寄存器是通道控制寄存器2 (TIMERx_CHCTL2) ,bit1决定通道0是上升沿还是下降沿,bit5决定通道1是上升沿还是下降沿。 ![](https://cf02.ickimg.com/bbsimages/202011/61af5d53fc46c5c2d4aba5a64c34c4c7.png) 之后需要配置通道的模式,同样是在通道控制器0 (TIMERx_CHCTL0) 中配置,bit[1:0]是通道0,bit[9:8]是通道1。 ![](https://cf02.ickimg.com/bbsimages/202011/241f0deb3f03c7682d6e2f61585cd373.png) ![](https://cf02.ickimg.com/bbsimages/202011/cde7e527f683503fc2598e88c416fc70.png) ![](https://cf02.ickimg.com/bbsimages/202011/9bd171312bf4be65388ae66faef27671.png) 这里通道0配置为上升沿触发,模式配置为输入,将IS0映射在CI0上。与此类似将通道1配置为下降沿触发,通道1的模式配置为输入,将IS1映射在CI0上。至于为什么这么配置后边就明白了。这里可以看到,同一个输入信号可以以不一样的触发方式同时配置到两个通道上。 ![](https://cf02.ickimg.com/bbsimages/202011/eb01794ae00b448bb81846abdf6d056d.png) ###**3、打开中断和比较捕获功能** 接下来打开通道0和1的捕获中断。寄存器是DMA 和中断使能寄存器 (TIMERx_DMAINTEN) ,bit1是通道0,bit2是通道1。 ![](https://cf02.ickimg.com/bbsimages/202011/02264384190e15b3fbcdc890ddef58f9.png) 上面都配置好后要打开两个通道的比较捕获功能,寄存器是通道控制寄存器 2 (TIMERx_CHCTL2) ,bit0是通道0,bit4是通道1。 ![](https://cf02.ickimg.com/bbsimages/202011/4a0e86065f7b5bbf86003fea61c610cf.png) 代码如下: ![](https://cf02.ickimg.com/bbsimages/202011/443bd2f4dd40ffb8a6e55e627b161b30.png) 使能计数器,初始化工作就基本完成了。 ![](https://cf02.ickimg.com/bbsimages/202011/bc5b644807c0c943fff07dc8e70db9c2.png) 最后需要编写中断处理程序,程序里需要清除中断标志、获取捕获寄存器的值、产生软件更新事件。代码如下所示: ![](https://cf02.ickimg.com/bbsimages/202011/7fc20d905e010413fdcf32e1a8125b94.png) 代码中让通道0的上升沿产生更新事件,所以通道0得到的就是信号的周期,通道1统计的是上升沿到下降沿的时间,得到的是高电平的时间,这样通过这两个寄存器的值就可以算出周期和占空比。 ###测试实验 这里我使用pwm发生器产生一个50hz,占空比50%的方波。 ![](https://cf02.ickimg.com/bbsimages/202011/1c4f9d9d8108490204e1ed569a6f5c43.png) 得到的通道0的值是19873左右,通道1是9936左右。我们的时钟是1Mhz,所以得到的方波周期大概为19.873ms,占空比是49.9%,考虑到误差,与发生器设定的很接近。 ![](https://cf02.ickimg.com/bbsimages/202011/c8d9f5e708acfad916534b1099413968.png) ok,关于输入捕获就介绍到这里了,希望对大家有所帮助,我们下期讲一下pwm输出。
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
gcrisis
关注
评论
(1)
登录后可评论,请
登录
或
注册
icicic
172
天前...
112233
0
回复
发布
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交