跳转到主要内容

爱普特 APT32F110 ev board 试用测评连载03

刘煜 提交于

<strong><font color="red">相关阅读:</font> </strong>

<a href="https://mcu.eetrend.com/blog/2022/100564533.html">爱普特 APT32F110 ev board 试用测评连载01</a>
<a href="https://mcu.eetrend.com/blog/2022/100564538.html">爱普特 APT32F110 ev board 试用测评连载02</a>

<p>
<span style="font-size: 16px; color: rgb(247, 150, 70);">作者:刘煜</span>
</p>
<p>
<span style="font-size: 18px;"><strong>目录</strong></span>
</p>
<p>
<a href="#1" target="_self"><span style="font-size: 18px;">1. 定时器分类</span></a><br/>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: disc;">
<li>
<p>
<a href="#1.1" target="_self">系统定时器 (CORET)&nbsp;</a>
</p>
</li>
<li>
<p>
<a href="#1.3" target="_self">基本计数器 (Basic Timer)&nbsp;</a>
</p>
</li>
<li>
<p>
<a href="#1.3" target="_self">计数器A (CNTA)&nbsp;</a>
</p>
</li>
<li>
<p>
<a href="#1.4" target="_self">增强型通用定时器 (GPTA)&nbsp;</a>
</p>
</li>
<li>
<p>
<a href="#1.5" target="_self">增强型通用定时器B (GPTB)&nbsp;</a>
</p>
</li>
<li>
<p>
<a href="#1.6" target="_self">增强型通用定时器 (EPT)&nbsp;</a>
</p>
</li>
<li>
<p>
<a href="#1.7" target="_self">实时时钟计数器(RTC)</a>
</p>
</li>
<li>
<p>
<a href="#1.8" target="_self">低功耗定时器 (LPT)&nbsp;</a>
</p>
</li>
<li>
<p>
<a href="#1.9" target="_self">窗口型看门狗 (WWDT)&nbsp;</a>
</p>
</li>
<li>
<p>
<a href="#1.10" target="_self">独立看门狗 (IWDT)&nbsp;</a>
</p>
</li>
</ul>
<p>
<a href="#2" target="_self"><span style="font-size: 18px;">2. 逐个分析</span></a><br/>
</p>
<p>
<a href="#2.1" target="_self">1. 基本计数器 (Basic Timer)&nbsp;</a>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: circle;">
<li>
<p>
<a href="#2.1-1" target="_self">定时中断</a>
</p>
</li>
<li>
<p>
<a href="#2.1-2" target="_self">PWM</a>
</p>
</li>
</ul>
<p>
<a href="#2.2" target="_self">2. 计数器A (CNTA)&nbsp;</a>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: circle;">
<li>
<p>
<a href="#2.2-1" target="_self">定时中断</a>
</p>
</li>
<li>
<p>
<a href="#2.2-2" target="_self">pwm</a>
</p>
</li>
</ul>
<p>
<a href="#2.3" target="_self">3. 实时时钟计数器(RTC)</a>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: circle;">
<li>
<p>
<a href="#2.3-1" target="_self">万年历</a>
</p>
</li>
<li>
<p>
<a href="#2.3-2" target="_self">闹钟</a>
</p>
</li>
</ul>
<p>
<a href="#2.4" target="_self">4. 窗口型看门狗 (WWDT)</a>
</p>
<p>
<a href="#2.5" target="_self">5. 独立看门狗 (IWDT)&nbsp;</a>
</p>
<p>
<span style="font-size: 18px;"><a href="#3" target="_self">3. 测评总结</a></span>
</p>
<hr/>
<p>
<span style="font-size: 18px;"><strong><a name="1"></a>1. 定时器分类</strong></span>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: disc;">
<li>
<p>
<strong><a name="1.1"></a>系统定时器 (CORET)</strong>
</p>
</li>
</ul>
<ol class="custom_num list-paddingleft-1">
<li class="list-num-1-1 list-num-paddingleft-1">
<p>
1. 24位递减计数器
</p>
</li>
<li class="list-num-1-2 list-num-paddingleft-1">
<p>
2. 递减到0可以产生中断
</p>
</li>
<li class="list-num-1-3 list-num-paddingleft-1">
<p>
3. 递减到0需软件重新置位
</p>
</li>
<li class="list-num-1-4 list-num-paddingleft-1">
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665137663397686.png" title="1665137663397686.png" alt="image001.png"/>
</p>
</li>
</ol>
<ul class=" list-paddingleft-2" style="list-style-type: disc;">
<li>
<p>
<strong><a name="1.2"></a>基本计数器 (Basic Timer)</strong>
</p>
<p>
1. 16位递增计数器
</p>
<p>
2. 16位预分频器
</p>
<p>
3. PWM输出
</p>
<p>
4. 支持ETCB
</p>
<p>
5. 四类中断
</p>
<p>
&nbsp; &nbsp;a) PEND事件:计数器周期结束时发生。
</p>
<p>
&nbsp; &nbsp;b) CMP事件:计数器计数值等于CMP寄存器设置时发生。
</p>
<p>
&nbsp; &nbsp;c) OVF事件:计数器计数溢出(0xFFFF)时发生。
</p>
<p>
&nbsp; &nbsp;d) TRGEV事件:同步触发输出事件有输出是发生
</p>
</li>
</ul>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665137979856051.png" title="1665137979856051.png" alt="image002.png"/>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: disc;">
<li>
<p>
<strong><a name="1.3"></a>计数器A (CNTA)</strong><br/>
</p>
<p>
1. 16位递减计数器
</p>
<p>
2. 用来产生载波频率
</p>
<p>
3. 可产生中断
</p>
</li>
</ul>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665138053165069.png" title="1665138053165069.png" alt="image003.png"/>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: disc;">
<li>
<p>
<strong><a name="1.4"></a>增强型通用定时器 (GPTA)</strong>
</p>
<p>
1. 16/24 位可复位计数器(GPT0 为 24bit; GPT1 为 16bit;)
</p>
<p>
2. 可编程计数器计数方式
</p>
<p>
&nbsp; &nbsp;a) 递增计数(Up-counting)
</p>
<p>
&nbsp; &nbsp;b) 递减计数(Down-counting)
</p>
<p>
&nbsp; &nbsp;c) 递增递减计数(Up-down-counting)
</p>
<p>
3. 支持事件计数器,可通过配置事件计数器(最大 15)触发相应中断
</p>
</li>
</ul>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665138138285517.png" title="1665138138285517.png" alt="image004.png"/>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: disc;">
<li>
<p>
<strong><a name="1.5"></a>增强型通用定时器B (GPTB)</strong>
</p>
<p>
1. 16 位可复位计数器
</p>
<p>
2. 可编程计数器计数方式
</p>
<p>
&nbsp; &nbsp;a) 递增计数(Up-counting)
</p>
<p>
&nbsp; &nbsp;b) 递减计数(Down-counting)
</p>
<p>
&nbsp; &nbsp;c) 递增递减计数(Up-down-counting)
</p>
<p>
3. 两路波形产生控制单元,支持双路独立输出:
</p>
<p>
&nbsp; &nbsp;a) 两路独立的 PWM 输出,单边沿工作
</p>
<p>
&nbsp; &nbsp;b) 两路独立的 PWM 输出,双边沿对称工作
</p>
<p>
&nbsp; &nbsp;c) 1 组独立的 PWM 互补输出 + 1 路独立的 PWM 输出
</p>
<p>
4. 异常事件发生时,自动触发预设波形输出
</p>
<p>
5. 触发源包括 GPIO 输入,其他外设触发,软件设置和事件触发
</p>
<p>
6. 支持单次触发和连续触发模式
</p>
<p>
7. 支持单脉冲输出模式
</p>
<p>
8. 支持事件计数器,可通过配置事件计数器(最大 15)触发相应中断
</p>
</li>
</ul>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665138238881201.png" title="1665138238881201.png" alt="image005.png"/>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: disc;">
<li>
<p>
<strong><a name="1.6"></a>增强型通用定时器 (EPT)</strong>
</p>
<p>
1. 16 位计数器
</p>
<p>
2. 支持 PWM 对更高载波频率进行斩波输出
</p>
<p>
3. 支持捕获模式,最多支持 4 个捕获值存储
</p>
</li>
</ul>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665138301962227.png" title="1665138301962227.png" alt="image006.png"/>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: square;">
<li>
<p>
<strong><a name="1.7"></a>实时时钟计数器(RTC)</strong>
</p>
<p>
1. 所有低功耗模式下均可独立运行
</p>
<p>
2. 支持系统唤醒
</p>
<p>
3. BCD 编码
</p>
<p>
4. 提供实时的日历和时间信息
</p>
<p>
5. 产生周期性的中断事件
</p>
<p>
6. 一旦初始化成功并开始工作,任何复位信号均不能影响其工作,除非重新上电
</p>
<p>
7. 支持多个时钟源,包括外部晶振、内部低速振荡器和内部主振荡器
</p>
</li>
</ul>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665138366591481.png" title="1665138366591481.png" alt="image007.png"/>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: disc;">
<li>
<p>
<strong><a name="1.8"></a>低功耗定时器 (LPT)</strong>
</p>
<p>
1. 16 位递增计数器
</p>
<p>
2. 4 Bit 预分频控制,支持(1,2,4,8,16,32,64,128,256,512,1024,2048,4096 分频)
</p>
<p>
3. 支持多种计数时钟:
</p>
<p>
&nbsp; &nbsp;a) 内部时钟:ISCLK, IMCLK, EMCLK,ESCLK 或 PCLK
</p>
<p>
&nbsp; &nbsp;b) 外部时钟:LPT_IN(当没有内部时钟时,可以作为脉冲计数)
</p>
<p>
&nbsp; &nbsp;c) 一路独立的 PWM 输出
</p>
<p>
4. 一个比较值寄存器
</p>
<p>
5. 支持连续或单次计数模式
</p>
<p>
6. 支持通过 ETCB 触发
</p>
<p>
7. 支持脉冲和 PWM 输出模式
</p>
</li>
</ul>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665138454510182.png" title="1665138454510182.png" alt="image008.png"/>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: disc;">
<li>
<p>
<strong><a name="1.9"></a>窗口型看门狗 (WWDT)</strong>
</p>
<p>
1. 8 位可编程递减计数器
</p>
<p>
2. 预设计数器时钟分频器:Div (1/2/4/8 x 4096)
</p>
<p>
&nbsp; &nbsp;a) 计数器时钟基于 PCLK 工作
</p>
<p>
&nbsp; &nbsp;b) 分频器的基础分频为 PCLK/4096
</p>
<p>
&nbsp; &nbsp;c) 可选择基于 4096 分频后的二次分频:DIV1,DIV2、DIV4 和 DIV8
</p>
<p>
3. 产生复位的条件:
</p>
<p>
&nbsp; &nbsp;a) 递减计数器计数器值小于 0x80
</p>
<p>
&nbsp; &nbsp;b) 软件刷新计数器发生在预设窗口外
</p>
<p>
&nbsp; &nbsp;c) 软件写入的刷新计数器的数值小于 0x80
</p>
<p>
4. 报警中断:当计数器值等于 0x80 时,可产生中断
</p>
</li>
</ul>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665138656955105.png" title="1665138656955105.png" alt="image009.png"/>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: disc;">
<li>
<p>
<strong><a name="1.10"></a>独立看门狗 (IWDT)</strong>
</p>
<p>
1. 中断可作为处理器在 DEEP-SLEEP 模式下定时唤醒的中断源
</p>
<p>
2. 12 位的 Free Running递减计数器
</p>
<p>
3. 一旦使能则必须在计数器溢出前进行清除,否则会产生系统复位
</p>
</li>
</ul>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665138705547593.png" title="1665138705547593.png" alt="image010.png"/>
</p>
<p>
<br/>
</p>
<p>
<span style="font-size: 18px;"><strong><a name="2"></a>2. 逐个分析</strong></span>
</p>
<ul class=" list-paddingleft-2" style="list-style-type: disc;">
<li>
<p>
<a name="2.1"></a>基本计数器 (Basic Timer)
</p>
<p>
<a name="2.1-1"></a>1.定时中断
</p>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665138784262826.png" title="1665138784262826.png" alt="image011.png"/>
</p>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665138807978986.png" title="1665138807978986.png" alt="image012.png"/>
</p>
<p>
中断函数中操作板载LED闪烁,同时串口每隔3秒输出一次“进入BT中断”。
</p>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665138817865032.png" title="1665138817865032.png" alt="image013.png"/>
</p>
<p>
<a name="2.1-2"></a>2.PWM
</p>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665138942265612.png" title="1665138942265612.png" alt="image014.png"/>
</p>
<p>
<img src="/files/ueditor/600/upload/image/20221007/1665138954331076.png" title="1665138954331076.png" alt="image015.png"/><br/>
</p>
</li>
</ul>
<p>
主循环调节占空比实现呼吸灯效果
</p>
<p>
<iframe frameborder="0" width="300" height="480" src="https://video.eetrend.com/f967293fvodcq1251003098/d815e1f93877023068835… frameborder="0" width="300" height="480" src="https://video.eetrend.com/f967293fvodcq1251003098/b187fd753877023068146…;
</p>
<ul class=" list-paddingleft-2" style="list-style-type: disc;">
<li>
<p>
<strong><a name="2.2"></a>计数器A (CNTA)</strong>
</p>
<p>
<a name="2.2-1"></a>1.定时中断<img src="/files/ueditor/600/upload/image/20221008/1665191978421656.png" title="1665191978421656.png" alt="image018.png"/>
</p>
<p>
<img src="/files/ueditor/600/upload/image/20221008/1665191997316097.png" title="1665191997316097.png" alt="image019.png"/>
</p>
<p>
中断函数中每隔3秒串口输出“进入CNTA中断”
</p>
<p>
<img src="/files/ueditor/600/upload/image/20221008/1665192049620837.png" title="1665192049620837.png" alt="image020.png"/><br/>
</p>
<p>
<a name="2.2-2"></a>2.pwm
</p>
<p>
<img src="/files/ueditor/600/upload/image/20221008/1665192143427752.png" title="1665192143427752.png" alt="image021.png"/>
</p>
<p>
<img src="/files/ueditor/600/upload/image/20221008/1665192244203545.jpg" title="1665192244203545.jpg" alt="image022.jpg"/>
</p>
<p>
<img src="/files/ueditor/600/upload/image/20221008/1665192258293530.jpg" title="1665192258293530.jpg" alt="image023.jpg"/>
</p>
<p>
<span style="color: rgb(247, 150, 70);"><strong>程序设计频率38KHz,占空比33%,实测频率为38.168KHz,占空比为38.168/116.279=32.82%,符合预期。</strong></span>
</p>
</li>
<li>
<p>
<strong><a name="2.3"></a>实时时钟计数器(RTC)</strong>
</p>
<p>
<a name="2.3-1"></a>1. 万年历
</p>
<p>
<img src="/files/ueditor/600/upload/image/20221008/1665192371490648.png" title="1665192371490648.png" alt="image024.png"/>
</p>
<p>
<img src="/files/ueditor/600/upload/image/20221008/1665192426398972.png" title="1665192426398972.png" alt="image025.png"/>
</p>
<p>
<a name="2.3-2"></a>2. 闹钟
</p>
<p>
<img src="/files/ueditor/600/upload/image/20221008/1665192487532410.png" title="1665192487532410.png" alt="image026.png"/><img src="/files/ueditor/600/upload/image/20221008/1665192519667617.png" title="1665192519667617.png" alt="image027.png"/><br/>
</p>
</li>
<li>
<p>
<strong><a name="2.4"></a>窗口型看门狗 (WWDT)</strong>
</p>
<p>
<strong><img src="/files/ueditor/600/upload/image/20221008/1665192553205249.png" title="1665192553205249.png" alt="image028.png"/></strong>
</p>
</li>
<li>
<p>
<strong><a name="2.5"></a>独立看门狗 (IWDT)</strong>
</p>
<p>
<strong><img src="/files/ueditor/600/upload/image/20221008/1665192576269929.png" title="1665192576269929.png" alt="image029.png"/></strong>
</p>
</li>
</ul>
<p>
<span style="font-size: 18px;"><strong><a name="3"></a>3. 测评总结</strong></span>
</p>
<p>
本期为定时器集合,学习了所有定时器外设并挑选其中的部分外设作简要调试测试。
</p>
<p>
根据实测效果来看,APT32F1104芯片定时器精度符合预期,代码封装较完善,实际只需小幅修改即可看到现象。
</p>