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

相关推荐
少司府8 小时前
嵌入式入门篇(二):初识STM32F103ZET6
linux·python·stm32·单片机·嵌入式硬件·mcu·嵌入式软件
Zwawa11 小时前
让屏幕动起来:OLED动画效果,丝滑光标、帧动画和一只贪吃蛇
c语言·单片机·嵌入式
简单电磁炮12 小时前
FWD八位单片机调试问题
单片机·嵌入式硬件
菥蓂寻生1 天前
STM32移植到GD32中以105为例
stm32·单片机·嵌入式硬件
橘为己有4411 天前
51单片机:定时/计数器
单片机·51单片机
杯子不吃紫菜1 天前
LangGraph 体系实战(下):中断恢复、流式、子图与设计模式
单片机·嵌入式硬件·设计模式
Risehuxyc1 天前
STM32程序逻辑---入口函数逻辑和NVIC嵌套向量中断控制器初始化
stm32·单片机·嵌入式硬件
【 STM32开发 】1 天前
CubeMX+STM32】SD卡U盘实现__USB+FATFS (F103 篇)
stm32·单片机·嵌入式硬件
jianqiang.xue2 天前
3倍向量算力:Arm给最小MCU装上本地AI
arm开发·人工智能·单片机
无敌最俊朗-2 天前
【电感专题2:电感的感抗、电路的阻抗、电流的滞后】
单片机·嵌入式硬件·元器件·电感