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 小时前
单片机开发工具篇:(十四)配置输出 .map 文件及其本地路径
c语言·单片机·嵌入式硬件
笨笨饿9 小时前
140_AI新手村MCP与Skills是干嘛的
开发语言·人工智能·python·stm32·单片机·嵌入式硬件·物联网
我叫洋洋11 小时前
Cadence CIS 元器件库合并实战:3000+ 焊盘、156 个符号零冲突并入自有库
数据库·单片机·嵌入式硬件·oracle·电路
ebiobiz13 小时前
极海 APM32 使用 Nimmake 编译指南
c++·python·单片机·嵌入式硬件·mcu
小神兵14 小时前
对电压源与电流源的的简单理解
单片机·嵌入式硬件·物联网
comyccccc15 小时前
三极管与MOS管工作原理全解析学习笔记
单片机·嵌入式硬件
FPGA小徐16 小时前
运放电路:负载必须接地时,如何做电流采样(浮地负载 vs 接地负载)
单片机·嵌入式硬件
女神下凡18 小时前
芯参谋(37):EEPROM_电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范
沐欣工作室_lvyiyi19 小时前
基于云平台的输液智能监测控制系统设计与实现(论文+源码)
stm32·单片机·单片机毕业设计·电子信息工程毕业设计
Zwawa20 小时前
蜂鸣器为什么会响:有源、无源和低电平触发
单片机·嵌入式