最近调试小控制器用到华芯的MCU,HS32F0033,奇怪的是在官网上查不到这颗料的信息。不过百度文心可以查的到:
HS32F0033是苏州华芯微电子推出的一款基于ARM Cortex-M0+内核的32位微控制器,最高运行主频可达24MHz,是面向工业控制、消费电子等场景的高性价比通用MCU。 核心硬件规格 内核性能:搭载ARM Cortex-M0+内核,内置单周期32位硬件乘法器,集成24位系统定时器,支持低功耗睡眠模式。 存储配置:内置32KB嵌入式Flash(带擦写保护功能)、4KB SRAM,同时自带16字节芯片唯一ID。 供电特性:支持2.5V~5.5V超宽工作电压,适配多种供电场景。 工作环境:工作温度范围覆盖-40℃~+85℃,满足工业级应用要求。 外设资源配置 定时器:包含1路16位高级控制定时器(支持4通道PWM输出、3路互补输出、死区生成与紧急停止)、1路16位通用定时器、1路16位可编程定时器阵列、2路基础定时器、1路低功耗定时器,同时集成独立看门狗和窗口看门狗。 模拟外设:配备7通道12位1Msps SAR型ADC,集成电压比较器和可配置中断/复位的低电压检测器。 通信接口:拥有2路标准UART、1路超低功耗UART、1路最高8Mbps的SPI、1路最高1Mbps的I2C,还支持One-Wire单总线接口。 其他功能:集成带万年历和闹钟唤醒功能的RTC、硬件CRC-16模块、蜂鸣器频率发生器,20引脚封装下可引出16个通用IO。 封装与开发支持 封装形式:提供TSSOP-20(6.5×4.4mm)和QFN-20(3×3mm)两种封装选项。 开发支持:支持SWD串行调试,配套在系统编程(ISP)方案,提供全功能嵌入式调试解决方案。Timer10和Timer11是基本定时器,与timer1和timer2配置不同,最大的坑是预分频。
timer2的配置
void BSP_Timer2_Init(void) { __HAL_RCC_TIM2_CLK_ENABLE(); /* Compute the prescaler value to have TIMx counter clock equal to 10000 Hz */ uwPrescalerValue = (uint32_t)(HAL_RCC_GetPCLKFreq() / TIM2_FREQ) - 1; sTim2Handle.Instance = TIM2; sTim2Handle.Init.Period = TIM2_PERIOD; sTim2Handle.Init.Prescaler = 0;//uwPrescalerValue; sTim2Handle.Init.ClockDivision = 0; sTim2Handle.Init.CounterMode = TIM_COUNTERMODE_UP; // TIM_COUNTERMODE_DOWN sTim2Handle.Init.RepetitionCounter = 0; sTim2Handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&sTim2Handle) != HAL_OK) { /* Initialization Error */ Error_Handler(); } HAL_NVIC_EnableIRQ(TIM2_IRQn); /*##-2- Start the TIM Base generation in interrupt mode ####################*/ if (HAL_TIM_Base_Start_IT(&sTim2Handle) != HAL_OK) { /* Starting Error */ Error_Handler(); } }预分频是1,如果prescaler=3,则预分频为4;
但是timer10不同:
#define TIM10_FREQ 1000000 //1000us #define TIM10_PERIOD (1000-1) static uint32_t uwPrescalerValue; BASETIM_HandleTypeDef sTim10Handle = {0}; void BSP_Timer10_Init(void) { __HAL_RCC_BASETIM_CLK_ENABLE(); uwPrescalerValue = (uint32_t)(HAL_RCC_GetPCLKFreq() / TIM10_FREQ) - 1; sTim10Handle.Instance = TIM10; sTim10Handle.Init.GateEnable = BASETIM_GATE_DISABLE; sTim10Handle.Init.GateLevel = BASETIM_GATELEVEL_LOW; sTim10Handle.Init.TogEnable = BASETIM_TOG_DISABLE; sTim10Handle.Init.CntTimSel = BASETIM_TIMER_SELECT;//BASETIM_COUNTER_SELECT; sTim10Handle.Init.AutoReload = BASETIM_AUTORELOAD_ENABLE;//BASETIM_AUTORELOAD_DISABLE; sTim10Handle.Init.MaxCntLevel = BASETIM_MAXCNTLEVEL_16BIT; sTim10Handle.Init.OneShot = BASETIM_REPEAT_MODE;//BASETIM_ONESHOT_MODE; sTim10Handle.Init.Prescaler = 7;//uwPrescalerValue; sTim10Handle.Init.Period = 0xffff-TIM10_PERIOD; if (HAL_BASETIM_Base_Init(&sTim10Handle) != HAL_OK) { /* Initialization Error */ Error_Handler(); } HAL_NVIC_SetPriority(TIM10_IRQn, 3); // 设置优先级,根据实际中断号修改 HAL_NVIC_EnableIRQ(TIM10_IRQn); /*##-2- Start the TIM Base generation in interrupt mode ####################*/ if (HAL_BASETIM_Base_Start_IT(&sTim10Handle) != HAL_OK) { /* Starting Error */ Error_Handler(); } }prescaler=3,则预分频为8;
prescaler=7,则预分频为128。
要查看寄存器才知道。