HC32F460PETB的PH2的TIM4_2_CLK

PH2做为TMR4-2的时钟输入。

简单的验证,只需要将旁边的PC13翻转,连接到PH2即可。

直接上代码。

主函数:

复制代码
int32_t main(void)
{

    /* Register write enable for some required peripherals. */
    LL_PERIPH_WE(LL_PERIPH_FCG | LL_PERIPH_GPIO | LL_PERIPH_PWC_CLK_RMU);

		LED_Init();
		PC13_Init();
		GPIO_InitForTim42CLK();
		FCG_Fcg2PeriphClockCmd(FCG2_PERIPH_TMR4_2, ENABLE);
		TMR42_Config();


    /* Register write protected for some required peripherals. */
    LL_PERIPH_WP(LL_PERIPH_FCG | LL_PERIPH_GPIO | LL_PERIPH_PWC_CLK_RMU);
		
    for (;;) {
		GPIO_TogglePins(GPIO_PORT_C, GPIO_PIN_13);
    }
}

PH2的配置:

复制代码
void GPIO_InitForTim42CLK(void)
{
    stc_gpio_init_t stcGpioInit;

//    /* 2. 配置 GPIO 结构体 */

    (void)GPIO_StructInit(&stcGpioInit);
    stcGpioInit.u16PinState = PIN_STAT_RST;
    stcGpioInit.u16PinDir = PIN_DIR_IN;
    stcGpioInit.u16PinOutputType = PIN_OUT_TYPE_CMOS;
    stcGpioInit.u16PinDrv = PIN_LOW_DRV;
    stcGpioInit.u16Latch = PIN_LATCH_OFF;
    stcGpioInit.u16PullUp = PIN_PU_ON;
    stcGpioInit.u16Invert = PIN_INVT_OFF;
    stcGpioInit.u16ExtInt = PIN_EXTINT_ON;	
		stcGpioInit.u16PinAttr = PIN_ATTR_DIGITAL;	

    GPIO_Init(GPIO_PORT_H, GPIO_PIN_02, &stcGpioInit);

    /* 3. 将 PH2 的复用功能设置为 Func1 (FCMREF) */
    GPIO_SetFunc(GPIO_PORT_H, GPIO_PIN_02, GPIO_FUNC_2);
}

定时器配置

复制代码
static uint32_t TMR4_ClockFreq(void)
{
    return CLK_GetBusClockFreq(CLK_BUS_PCLK1);
}

/* TMR4 count value per second */
#define TMR4_COUNT_VALUE_PER_SECOND(div)    ((TMR4_ClockFreq() / (1UL << (uint32_t)(div))))
unsigned int temp=0;
static void TMR4_CountValley_IrqCallback(void)
{
	GPIO_TogglePins(GPIO_PORT_E, GPIO_PIN_06);
	TMR4_ClearStatus(CM_TMR4_2, TMR4_FLAG_CNT_PEAK);
}

static void TMR42_Config(void)
{
    stc_tmr4_init_t stcTmr4Init;
    stc_irq_signin_config_t stcIrqConfig;

    /* Enable timer0 and AOS clock */
    FCG_Fcg2PeriphClockCmd(FCG2_PERIPH_TMR4_2, ENABLE);

    /* Initialize TMR4 Counter */
    stcTmr4Init.u16CountMode = TMR4_MD_SAWTOOTH; //三角波是锯齿波的2倍 
    stcTmr4Init.u16ClockSrc = TMR4_CLK_SRC_EXTCLK;//TMR4_CLK_SRC_INTERNCLK;
    stcTmr4Init.u16ClockDiv = TMR4_CLK_DIV64;
    stcTmr4Init.u16PeriodValue = (uint16_t)(TMR4_COUNT_VALUE_PER_SECOND(stcTmr4Init.u16ClockDiv) / \
                                            (2UL * ((uint32_t)TMR4_INT_CNT_MASK15 + 1UL))) - 1U;
    (void)TMR4_Init(CM_TMR4_2, &stcTmr4Init);

    /* Register IRQ handler && configure NVIC. */
    stcIrqConfig.enIRQn = INT000_IRQn;
    stcIrqConfig.enIntSrc = INT_SRC_TMR4_2_OVF;
    stcIrqConfig.pfnCallback = &TMR4_CountValley_IrqCallback;
    (void)INTC_IrqSignIn(&stcIrqConfig);
    NVIC_ClearPendingIRQ(stcIrqConfig.enIRQn);
    NVIC_SetPriority(stcIrqConfig.enIRQn, DDL_IRQ_PRIO_DEFAULT);
    NVIC_EnableIRQ(stcIrqConfig.enIRQn);

    /* Enable the valley interrupt */
    TMR4_IntCmd(CM_TMR4_2, TMR4_INT_CNT_PEAK, ENABLE);
		
		/* Start TMR4 count. */
    TMR4_Start(CM_TMR4_2);
}

测试结果:LE闪烁,表示TIM4收到时钟,进入中断。

相关推荐
Brilliantwxx1 小时前
【STM32】 I2C协议和设备主从( 图解 + 面试题 )
stm32·单片机·嵌入式硬件·架构
老当益壮梁奶奶1 小时前
51单片机中断系统详解
c语言·单片机·嵌入式硬件·学习·51单片机
Brilliantwxx1 小时前
【STM32】 I2C 外设内部硬件结构和状态位
开发语言·stm32·单片机·嵌入式硬件
天空'之城10 小时前
单片机基础核心知识点汇总(三十五)
单片机·嵌入式硬件
secondyoung10 小时前
I2C通信协议详解
arm开发·驱动开发·stm32·单片机·嵌入式硬件·mcu·51单片机
anew___10 小时前
蜂鸣器播放音乐——让 Arduino 唱出旋律
c++·stm32·单片机·嵌入式硬件·c
jianqiang.xue12 小时前
ESP-IDF保姆级入门40|量产烧录与产线测试全解:批量烧录方案/校准流程/功能测试/不良分拣/产线追溯,掌握工业级量产交付全流程
单片机·物联网·esp32
幼儿园蛋小黑15 小时前
单片机数码管LED灯独立按键中断定时器综合实战
单片机·嵌入式硬件
SKH.16 小时前
单片机(1)
单片机·嵌入式硬件