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收到时钟,进入中断。

相关推荐
西安同步电子1 小时前
时统卡驱动踩坑:Windows 和 Linux 下时间同步的底层差异
linux·stm32·单片机
女神下凡1 小时前
芯参谋(69):LED恒流驱动芯片电路设计指南
arm开发·人工智能·单片机·嵌入式硬件·设计规范
wanglong37132 小时前
Keil编译后自动重命名HEX文件
单片机·1024程序员节
iCxhust3 小时前
stm32f103c8t6 boot0设置
stm32·单片机·嵌入式硬件·1024程序员节
创界工坊工作室4 小时前
58-基于51单片机的多自由度机械手控制系统设计
stm32·单片机·嵌入式硬件·51单片机·proteus
思麟呀5 小时前
嵌入式入门(四)USART 串口深度解析:单片机第一次与电脑对话
c语言·单片机·嵌入式硬件·1024程序员节
BSD_HY5 小时前
薄膜开关分压网络接 MCU ADC:通道复用下的两个坑
单片机·薄膜开关·源头工厂
NamoAmitabha1285 小时前
BSP,板级支持包--deepseek
单片机·嵌入式硬件·fpga开发
小白今天也很酷5 小时前
MCXN947更新板载DAP_Link固件的方法
c语言·python·单片机·ubuntu·excel·1024程序员节
艾芯微科技13 小时前
HR911130C|汉仁 HANRUN 集成变压器千兆 RJ45 网口参数、电路、PCB 布线、替代与采购避坑
网络·单片机·嵌入式硬件·集成测试·51单片机