【技术】武汉芯源CW32定时器输入捕获的操作讲解
CW32系列MCU的GTIM、ATIM的每个定时器都带有至少4路独立的捕获/比较通道,输入捕获功能可以测量输入信号的脉冲宽度或者频率。当捕获比较通道CHy上信号发生跳变(上升沿或下降沿)时,硬件自动将当前计数寄存器GTIMx_CNT的值存放到对应通道的比较捕获寄存器GTIMx_CCRy中,完成一次捕获。通过连续几次捕获即可完成信号脉冲宽度或者频率的测量。
功能框图如下图所示:
各个通道上触发捕获的条件由比较捕获控制寄存器GTIMx_CMMR决定。
当发生一次捕获时,通道CHy比较捕获中断标志GTIMx_ISR.CCy被硬件置位,如果允许中断(设置中断使能寄存器GTIMx_IER.CCy为 1),CPU将响应中断服务程序。退出中断服务程序之前,应设置中断标志清除寄存器GTIMx_ICR.CCy为0以清除该标志。
输入捕获来源
GTIM的输入捕获来源可以是外部GTIMx_CHy引脚,也可以是片内其它外设,通过通用定时器输入捕获来源配置寄存器SYSCTRL_GTIMxCAP进行配置。当SYSCTRL_GTIMxCAP.CHy为0x00时,输入捕获信号的外部输入端口由GPIO复用功能寄存器(GPIOx_AFRH和GPIOx_AFRL)进行配置。当SYSCTRL_GTIMxCAP.CHy为0x01~0x07时,输入捕获信号来自片内其它外设,如下表所示:
这种配置下,可以在芯片内部实现外部输入的互联,例如将UART的RXD信号作为输入捕获来源,可以实现对UART波特率的自动检测。
实例演示
利用GTIM的输入捕获功能,测量PWM信号的周期和脉宽
1.初始化系统时钟
void RCC_Configuration(void)
{
__RCC_GTIM1_CLK_ENABLE();
__RCC_GPIOA_CLK_ENABLE();
RCC_HSI_Enable(RCC_HSIOSC_DIV6);
// 系统时钟设置为HSI,6分频,8MHz, PCLK、HCLK不分频, PCLK=HCLK=SysClk=8MHz
}
2.初始化GPIO
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.IT = GPIO_IT_NONE;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pins = GPIO_PIN_6 | GPIO_PIN_7;
GPIO_Init(CW_GPIOA, &GPIO_InitStruct);
PA06_AFx_GTIM1CH1();//设置PA06复用为GTIM1_CH1, 上升沿触发捕获
PA07_AFx_GTIM1CH2();//设置PA07复用为GTIM1_CH2,下降沿触发捕获。
}
3.配置中断服务程序
void NVIC_Configuration(void)
{
__disable_irq();
NVIC_EnableIRQ(GTIM1_IRQn);
__enable_irq();
}
4.GTIM1中断服务程序:
通道1的输入捕获中断获取计数值VALUE1,通道2的输入捕获中断获取计数值VALUE2,通道1的第2次输入捕获中断获取计数值VALUE3。则信号脉宽=VALUE2-VALUE1,信号周期=VALUE3-VALUE1。注意如果待测量信号的脉宽和周期较长,在计算时需要考虑定时器的溢出问题,详见定时器溢出中断处理内容。
void GTIM1_IRQHandler(void)
{
GTIM1_IRQHandlerCallBack();
}
void GTIM1_IRQHandlerCallBack(void)
{
static uint8_t stage = 0;
static uint32_t cnt = 0;
if (GTIM_GetITStatus(CW_GTIM1, GTIM_IT_OV))
{
GTIM_ClearITPendingBit(CW_GTIM1, GTIM_IT_OV);
if (stage == 1)
{
cnt++;
}
}
if (GTIM_GetITStatus(CW_GTIM1, GTIM_IT_CC1))
{
if (stage == 0)
{
PWMPeriod = GTIM_GetCapture1(CW_GTIM1);
stage = 1;
}
else if (stage == 1)
{
PWMPeriod = GTIM_GetCapture1(CW_GTIM1) + cnt * 65536 - PWMPeriod;
stage = 0;
cnt = 0;
}
GTIM_ClearITPendingBit(CW_GTIM1, GTIM_IT_CC1);
}
if (GTIM_GetITStatus(CW_GTIM1, GTIM_IT_CC2))
{
if (stage == 1)
{
PWMWidth = GTIM_GetCapture2(CW_GTIM1) + cnt * 65536 - PWMPeriod;
}
GTIM_ClearITPendingBit(CW_GTIM1, GTIM_IT_CC2);
}
}
5.主程序:使用GTIM1的CH1和CH2两个通道对PWM输入信号进行测量,在捕获中断服务程序中完成信号的周期和脉宽计算。
static uint32_t PWMPeriod = 0;
static uint32_t PWMWidth = 0;
int32_t main(void)
{
RCC_Configuration();//System Clocks Configuration
GPIO_Configuration();//GPIO Configuration
NVIC_Configuration();//NVIC Configuration
GTIM_InitTypeDef GTIM_InitStruct = {0};
GTIM_ICInitTypeDef GTIM_ICInitStruct = {0};
GTIM_InitStruct.Mode = GTIM_MODE_TIME; /*!< GTIM的模式选择。*/
GTIM_InitStruct.OneShotMode = GTIM_COUNT_CONTINUE;
/*!< GTIM的单次/连续计数模式选择。*/
GTIM_InitStruct.Prescaler = GTIM_PRESCALER_DIV1; /*!< GTIM的预分频系数。*/
GTIM_InitStruct.ReloadValue = 0xFFFF; /*!< GTIM的重载值。*/
GTIM_InitStruct.ToggleOutState = DISABLE;
GTIM_TimeBaseInit(CW_GTIM1, >IM_InitStruct); //GTIM的基础参数初始化
GTIM_ICInitStruct.CHx = GTIM_CHANNEL1;// GTIM 输入捕获的配置参数
GTIM_ICInitStruct.ICFilter = GTIM_CHx_FILTER_NONE;
GTIM_ICInitStruct.ICInvert = GTIM_CHx_INVERT_ON;
GTIM_ICInitStruct.ICPolarity = GTIM_ICPolarity_Rising;
GTIM_ICInit(CW_GTIM1, >IM_ICInitStruct);//输入捕获功能初始化
GTIM_ICInitStruct.CHx = GTIM_CHANNEL2;
GTIM_ICInitStruct.ICPolarity = GTIM_ICPolarity_Falling;
GTIM_ICInit(CW_GTIM1, >IM_ICInitStruct);
GTIM_ITConfig(CW_GTIM1, GTIM_IT_CC1 | GTIM_IT_CC2 | GTIM_IT_OV, ENABLE);
GTIM_Cmd(CW_GTIM1, ENABLE);
while (1)
{
}
}
6.演示说明:
将同一个PWM输入信号引入到PA06和PA07上,运行程序,使用GTIM1的CH1和CH2两个通道对PWM输入信号的脉宽和周期进行测量。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由认真转载自武汉芯源半导体公众号,原文标题为:CW32定时器操作讲解——输入捕获,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关研发服务和供应服务
相关推荐
介绍MCU的ARM处理器——Cortex-M0+内核
ARM Cortex-M0+是2012年3月14日ARM公司发布的一款低功耗效率、能效最高的ARM处理器,可用于存在设计约束的嵌入式应用。它具有最小的硅面积和极少的代码量,从而使开发人员能够以16和8位的价位实现32位性能。处理器的低门数使其能够部署在需要简单功能的应用中。本文中武汉芯源来给大家介绍Cortex-M0+内核,希望对各位工程师有所帮助。
【技术】一文介绍使用CW32系列MCU实现电池备份(VBAT)功能
本文档介绍了如何基于CW32系列MCU,通过增加简单的外部电路配合软件实现VBAT功能,在系统电源掉电后仍能保持RTC时钟正常计时,以及如何降低系统功耗,从而延长后备电池的使用寿命。
【技术】解析武汉芯源MCU CW32系统滴答SysTick定时器
Cortex-M0+处理器中内置有一个SysTick定时器,通常用于嵌入式操作系统的多任务切换,在不使用操作系统的应用中,亦可作为其它用途,如定时、计时或者为需要周期性执行的任务提供中断源。
武汉芯源半导体安全低功耗MCU CW32L010 | 新品使用初体验
CW32L010新品的正式发布,标志着嵌入式技术领域的又一次创新突破。今日,我们有幸进行该新品的首次使用体验,以一块L010核心板为例,体验一下这颗芯片
【经验】武汉芯源CW32系列MCU PWM输出功能指南
脉冲宽度调制(PWM),是在数字电路中达到模拟输出效果的一种手段,常见应用电机调速,照明灯调光等。在MCU中,主要通过定时器单元来时实现PWM输出,以CW32L083VxTx为例,LPTIM,GTIM,ATIM都可以输出PWM信号。
武汉芯源半导体CW32L010系列安全低功耗MCU:驱动高速风筒新力量
MCU作为高速风简控制系统的核心,承担着传感器数据采集、高速电机控制、用户界面交互以及安全保护等多重任务。武汉芯源半导体CW32L010系列MCU可支持低成本、高性能、低功耗、高度集成的高速风筒方案,以满足市场对高效、安全、智能的高速风筒需求。
【应用】基于国产32位MCU芯片CW32F030C8T6的智能门锁方案,主频64MHz,具备低功耗多功能优势
智能门锁集成3D识别算法、接近检测、指纹输入模块,低功耗计算芯片等于一体,解锁快、功耗低、续航久,现武汉芯源推出一款MCU芯片CW32F030C8T6助力于智能门锁设计。
【IC】武汉芯源CW32L010安全低功耗MCU,树立M0+产品行业新标杆!
近日,武汉芯源半导体CW32L010系列产品正式官方发布。这款产品以其卓越的产品性能,迅速在业界引起了广泛关注,并成功树立M0+产品行业的新标杆。产品是基于eFlash的单芯片低功耗微控制器,集成了主频高达48MHz的ARM®Cortex®-M0+内核、高速嵌入式存储器(多至64K字节FLASH和多至4K字节SRAM)以及一系列全面的增强型外设和I/O口。
CW32L010 ARM®Cortex®-M0+32位低功耗MCU,高达64KB闪存、4KB RAM规格书
描述- 本资料为Wuhan Xinyuan Semiconductor Co., Ltd.生产的CW32L010微控制器的数据手册。该微控制器基于ARM® Cortex®-M0+内核,具有低功耗特性,最高频率可达48 MHz。它集成了高达64KB的闪存、4KB的RAM,支持多种外设和通信接口,适用于各种低功耗应用。
型号- CW32L010,CW32L010F8,CW32L010F8P6,CW32L010F8U6,CW32L010F8U6X,CW32L010Y8M6,CW32L010Y8,CW32L010X8
使用通用串口模块下载CW32F030芯片的方法
在常见的客户技术支持中,常有需要串口下载CW32芯片的问题,现整理一份文档供参考。
【应用】基于CW32L系列MCU的指夹式血氧仪,实现更高精度测量
主控芯片建议使用CW32F003(20pin)资源足够,还便宜。CW32抗干扰性能可轻松通过ESD 8KV认证,加之优秀的ADC性能,是血氧仪类产品的不二之选
CW32L010 ARM®Cortex®-M0+低功耗32位MCU参考手册
描述- 本资料为CW32L010微控制器参考手册,旨在为应用开发者提供关于如何使用该微控制器内存和外设的完整信息。手册内容涵盖系统架构、内存组织、电源控制、复位和时钟控制、中断、RAM和FLASH内存、GPIO、CRC、RTC、定时器、看门狗定时器、UART、SPI、I2C、红外调制发射器、ADC、电压比较器、低压检测器、调试接口和数字签名等模块的详细说明和编程指南。
型号- CW32L010
【经验】芯源CW32系列MCU电容式触摸按键设计指南
芯源半导体的CW32系列MCU电容式触摸按键设计指南向客户提供利用CW32内部资源结合软件编程实现电容式触摸按键有效触摸检测的方法。本指南内容重点在于工作原理、软件检测过程以及调试指引。通过本文可了解到如何利用内置电压比较器和内置定时器及软件配合,实现灵活方便的按键检测。在介绍标准演示板和演示软件的性能参数同时,还会给出详细的调试建议以及设计参数选择倾向分析,帮助客户快速自信地完成设计并实施调试。
精雕细琢打造MCU,武汉芯源开辟属于自己的Cortex-M0+新赛道!
物联网市场如火如荼,在大量基于Cortex™-M0+的MCU已经面市的情况下,Cortex™-M0+ MCU在以这片红海中还有发展的空间吗?答案是有,近日武汉芯源半导体推出的基于Cortex™-M0+内核CW32L010新品系列就是通过差异化的细节设计开辟了属于自己的新赛道。
【产品】武汉芯源CW32L083系列MCU中断系统介绍
本文针对武汉芯源CW32L083系列MCU,同系列产品亦可参考。ARM® Cortex®-M0+内核的嵌套向量中断控制器(NVIC),用于管理中断和异常。NVIC和处理器内核紧密相连,可以实现低延迟的异常和中断处理。
电子商城
现货市场
服务
可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。
最小起订量: 1000 提交需求>
拥有IC烧录机20余款,100余台设备,可以烧录各种封装的IC;可烧录MCU、FLASH、EMMC、NAND FLASH、EPROM等各类型芯片,支持WIFI/BT模组PCBA烧录、测试。
最小起订量: 1 提交需求>
登录 | 立即注册
提交评论