完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、计时功能
设置系统时钟 APB2=84M TIM1的时钟频率=2*APB2=168M 定时器1配置 TIM中断频率: 168M/168=1000hz=1ms 1ms*500=500ms 所有TIM1:500ms中断一次。 程序编写 #include “stm32f4xx_hal.h” #include “led/bsp_led.h” #include “AdvancedTIM/bsp_AdvancedTIM.h” /* 私有类型定义 --------------------------------------------------------------*/ /* 私有宏定义 ----------------------------------------------------------------*/ /* 私有变量 ------------------------------------------------------------------*/ __IO uint16_t timer_count=0; /* 扩展变量 ------------------------------------------------------------------*/ /* 私有函数原形 --------------------------------------------------------------*/ void SystemClock_Config(void); /* 函数体 --------------------------------------------------------------------*/ /** * 函数功能: 主函数。 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ int main(void) { /* 复位所有外设,初始化Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 板载LED初始化 */ LED_GPIO_Init(); /* 通用定时器初始化:1ms中断一次 */ ADVANCED_TIMx_Init(); /* 在中断模式下启动定时器 */ HAL_TIM_Base_Start_IT(&htimx); LED2_ON; /* 无限循环 */ while (1) { if(timer_count==1000) { timer_count=0; LED1_TOGGLE; LED2_TOGGLE; LED3_TOGGLE; } } } /** * 函数功能: 系统时钟配置 * 输入参数: 无 * 返 回 值: 无 * 说 明: 无 */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; __HAL_RCC_PWR_CLK_ENABLE(); //使能PWR时钟 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); //设置调压器输出电压级别1 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; // 外部晶振,8MHz RCC_OscInitStruct.HSEState = RCC_HSE_ON; //打开HSE RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; //打开PLL RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; //PLL时钟源选择HSE RCC_OscInitStruct.PLL.PLLM = 8; //8分频MHz RCC_OscInitStruct.PLL.PLLN = 336; //336倍频 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; //2分频,得到168MHz主时钟 RCC_OscInitStruct.PLL.PLLQ = 7; //USB/SDIO/随机数产生器等的主PLL分频系数 HAL_RCC_OscConfig(&RCC_OscInitStruct); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; // 系统时钟:168MHz RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; // AHB时钟: 168MHz RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; // APB1时钟:42MHz RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; // APB2时钟:84MHz HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5); HAL_RCC_EnableCSS(); // 使能CSS功能,优先使用外部晶振,内部时钟源为备用 // HAL_RCC_GetHCLKFreq()/1000 1ms中断一次 // HAL_RCC_GetHCLKFreq()/100000 10us中断一次 // HAL_RCC_GetHCLKFreq()/1000000 1us中断一次 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); // 配置并启动系统滴答定时器 /* 系统滴答定时器时钟源 */ HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); /* 系统滴答定时器中断优先级配置 */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } /** * 函数功能: 非阻塞模式下定时器的回调函数 * 输入参数: htim:定时器句柄 * 返 回 值: 无 * 说 明: 无 */ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { timer_count++; } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1848 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1647 浏览 1 评论
1120 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
745 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1704 浏览 2 评论
1959浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
766浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
596浏览 3评论
618浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
578浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-4 18:17 , Processed in 0.836497 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号