STM32F7高级定时器TIM1/TIM8详解:解决SpringBoot应用资源访问问题

需积分: 46 149 下载量 2 浏览量 更新于2024-08-05 收藏 20.95MB PDF 举报
本文档主要介绍了STM32F7系列高级微控制器中的TIM1/TIM8定时器模块,它在SpringBoot打成jar运行后解决资源文件读取问题的重要角色。TIM1和TIM8是高级控制定时器,每个都具备16位自动重载计数器,能够通过预分频器灵活调整计数速度,广泛应用于测量输入脉冲、生成输出波形等任务。这些定时器具有丰富的特性: 1. 16位自动重载计数器:可进行递增、递减或交替模式的计数,提供了很高的灵活性。 2. 可编程预分频器:允许实时调整计数器时钟频率,范围从1到65536,这对于精确的时间管理至关重要。 3. 多通道功能:支持6个独立通道,包括输入捕获、输出比较、PWM生成和单脉冲模式输出,满足不同应用场景的需求。 4. 带死区的互补输出:增加了安全性,确保输出信号的稳定性和可靠性。 5. 同步机制:与其他定时器以及外部信号可以实现同步,便于集成复杂系统。 6. 中断和DMA支持:当特定事件发生时,如计数器溢出或捕获信号,会触发中断或DMA请求,提高处理效率。 7. 硬件特性:支持编码器和霍尔传感器应用,还可用作外部时钟源或逐周期电流管理。 文档详细阐述了STM32F75xxx和STM32F74xxx微控制器的系统架构,包括AHB、APB总线,以及内存和外设的详细布局。例如,它提到了内部的ITCM、DTCM存储区域,以及如何通过DMA总线进行高效的数据传输,这些都是在使用TIM1/TIM8时可能涉及的硬件资源管理内容。 对于开发者来说,理解并正确配置这些定时器,尤其是在SpringBoot环境下处理资源文件,能够确保应用程序的稳定性和性能。当面临资源文件访问问题时,TIM1/TIM8定时器可以通过定时读取或调度任务来解决,避免阻塞主线程,提高系统的响应速度和资源利用率。 这篇文档是STM32F7系列微控制器使用者的宝贵参考资料,对于那些希望在实际项目中利用TIM1/TIM8功能的开发人员来说,是不可或缺的技术指南。

static inline void Car_forward(u8 speed) { TIM1->CCR1 = 20; // PA8 TIM1->CCR2 = 0; // PA9 TIM1->CCR3 = 20; // PA10 TIM1->CCR4 = 0; // PA11 TIM4->CCR1 = 20; // PB6 TIM4->CCR2 = 0; // PB7 TIM4->CCR3 = 20; // PB8 TIM4->CCR4 = 0; // PB9 } static inline void Car_Backward(u8 speed) { TIM1->CCR1 = 0; // PA8 TIM1->CCR2 = 20; // PA9 TIM1->CCR3 = 0; // PA10 TIM1->CCR4 = 20; // PA11 TIM4->CCR1 = 0; // PB6 TIM4->CCR2 = 20; // PB7 TIM4->CCR3 = 0; // PB8 TIM4->CCR4 = 20; // PB9 } static inline void Car_Turn_Left(u8 speed) { TIM1->CCR1 = 0; // PA8 TIM1->CCR2 = 20; // PA9 TIM1->CCR3 = 0; // PA10 TIM1->CCR4 = 20; // PA11 TIM4->CCR1 = 20; // PB6 TIM4->CCR2 = 0; // PB7 TIM4->CCR3 = 20; // PB8 TIM4->CCR4 = 0; // PB9 delay_ms(500); TIM1->CCR1 = 20; // PA8 TIM1->CCR2 = 0; // PA9 TIM1->CCR3 = 20; // PA10 TIM1->CCR4 = 0; // PA11 TIM4->CCR1 = 20; // PB6 TIM4->CCR2 = 0; // PB7 TIM4->CCR3 = 20; // PB8 TIM4->CCR4 = 0; // PB9 } static inline void Car_Turn_Right(u8 speed) { TIM1->CCR1 = 20; // PA8 TIM1->CCR2 = 0; // PA9 TIM1->CCR3 = 20; // PA10 TIM1->CCR4 = 0; // PA11 TIM4->CCR1 = 0; // PB6 TIM4->CCR2 = 20; // PB7 TIM4->CCR3 = 0; // PB8 TIM4->CCR4 = 20; // PB9 delay_ms(500); TIM1->CCR1 = 20; // PA8 TIM1->CCR2 = 0; // PA9 TIM1->CCR3 = 20; // PA10 TIM1->CCR4 = 0; // PA11 TIM4->CCR1 = 20; // PB6 TIM4->CCR2 = 0; // PB7 TIM4->CCR3 = 20; // PB8 TIM4->CCR4 = 0; // PB9 } static inline void Car_Stop(u8 speed) { TIM1->CCR1 = 0; // PA8 TIM1->CCR2 = 0; // PA9 TIM1->CCR3 = 0; // PA10 TIM1->CCR4 = 0; // PA11 TIM4->CCR1 = 0; // PB6 TIM4->CCR2 = 0; // PB7 TIM4->CCR3 = 0; // PB8 TIM4->CCR4 = 0; // PB9 }优化这段代码

2023-05-24 上传

void TIM2_PWMShiftInit_3(TypeDef_Tim* Tim) { TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; GPIO_InitTypeDef GPIO_InitStruct = {0}; Tim->Psc=3; Tim->TimeClock=200000000;// Tim->Frequence=2000;// Tim->Duty=0.5; Tim->DT=2000;// Tim->Arr=Tim->TimeClock/(Tim->Psc+1)/Tim->Frequence/2;// // Tim->CH1Ccr=Tim->Arr-(Tim->Arr*Tim->Duty)-Tim->DT/((Tim->Psc+1)*(1000000000.0f/Tim->TimeClock));// Tim->CH2Ccr=Tim->Arr-(Tim->Arr*Tim->Duty); Tim->Htim.Instance = TIM2; Tim->Htim.Init.Prescaler = Tim->Psc; Tim->Htim.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED3; Tim->Htim.Init.Period = Tim->Arr; Tim->Htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; Tim->Htim.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; HAL_TIM_Base_Init(&Tim->Htim); HAL_TIM_Base_Start_IT(&Tim->Htim);// sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; HAL_TIM_ConfigClockSource(&Tim->Htim, &sClockSourceConfig); HAL_TIM_OC_Init(&Tim->Htim); sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&Tim->Htim, &sMasterConfig); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = Tim->CH1Ccr; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;// sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_OC_ConfigChannel(&Tim->Htim, &sConfigOC, TIM_CHANNEL_3); __HAL_TIM_ENABLE_OCxPRELOAD(&Tim->Htim, TIM_CHANNEL_3); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = Tim->CH2Ccr; sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;// sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_OC_ConfigChannel(&Tim->Htim, &sConfigOC, TIM_CHANNEL_4); __HAL_TIM_ENABLE_OCxPRELOAD(&Tim->Htim, TIM_CHANNEL_4); __HAL_RCC_GPIOB_CLK_ENABLE(); /**TIM2 GPIO Configuration PB10 ------> TIM2_CH3 PB11 ------> TIM2_CH4 */ GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF1_TIM2; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_TIM_PWM_Start(&Tim->Htim, TIM_CHANNEL_3); HAL_TIM_PWM_Start(&Tim->Htim, TIM_CHANNEL_4); } TIM2_PWMShiftInit_3(&MyTim2);是什么意思

2023-04-24 上传
2023-07-25 上传