uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb);
时间: 2023-08-05 12:11:12 浏览: 75
`HAL_SYSTICK_Config()` 是一个函数,用于配置 SysTick 定时器的时间间隔。它的参数 `TicksNumb` 是一个 32 位无符号整数,表示 SysTick 定时器的计数器每经过多少时钟周期就会加一。该函数返回一个 32 位无符号整数,表示 SysTick 定时器的时钟频率。在调用该函数之前,需要先初始化 SysTick 定时器的时钟源和中断优先级。
相关问题
__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { /* Configure the SysTick to have interrupt in 1ms time basis*/ if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) { return HAL_ERROR; } /* Configure the SysTick IRQ priority / if (TickPriority < (1UL << __NVIC_PRIO_BITS)) { HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); uwTickPrio = TickPriority; } else { return HAL_ERROR; } / Return function status */ return HAL_OK; }中断时间计算过程
在这段代码中,中断时间的计算过程如下:
1. `SystemCoreClock`是系统时钟频率,单位为Hz。
2. `1000U`表示1毫秒的时间,单位为微秒。
3. `uwTickFreq`是tick的频率,单位为Hz,可以通过`HAL_InitTick()`函数的参数`TickPriority`来设置。
4. `SystemCoreClock / (1000U / uwTickFreq)`表示在tick频率为`uwTickFreq`的情况下,每个tick的时间,单位为微秒。
5. `HAL_SYSTICK_Config()`函数会将上述计算结果作为参数,用于配置SysTick定时器的计数器自动重载寄存器(reload register)的值,来实现1毫秒的中断时间。
6. 如果成功配置定时器中断,`HAL_SYSTICK_Config()`函数将返回0,否则返回非0值。
7. 如果成功配置定时器中断,则通过`HAL_NVIC_SetPriority()`函数设置中断优先级,并将`uwTickPrio`变量设置为`TickPriority`的值。
8. 如果`TickPriority`的值大于或等于`1UL << __NVIC_PRIO_BITS`,则返回错误状态`HAL_ERROR`;否则,返回成功状态`HAL_OK`。
总之,这段代码通过配置SysTick定时器的计数器自动重载寄存器的值,实现了1毫秒的中断时间。
HAL_UART_MspDeInit(&huart6); HAL_GPIO_DeInit(GPIOB,GPIO_PIN_All); HAL_GPIO_DeInit(GPIOC,GPIO_PIN_All); HAL_GPIO_DeInit(GPIOD,GPIO_PIN_All); SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; HAL_RCC_DeInit(); /* disable and clean up all interrupts. */ for(index = 0; index < 8; index++) { /* disable interrupts. */ NVIC->ICER[index] = 0xFFFFFFFF; /* clean up interrupts flags. */ NVIC->ICPR[index] = 0xFFFFFFFF; } /* Jump to user application */ JumpAddress = *(__IO uint32_t*) (application_address + 4); Jump_To_Application = (pFunction)(JumpAddress); /* Initialize user application's Stack Pointer */ __set_MSP(*(__IO uint32_t*) application_address); /* Jump to application */ Jump_To_Application();
这段代码看起来是在进行系统重启或者切换到用户应用程序的操作。具体来说,代码中的操作包括:
1. 关闭UART6外设的初始化。
2. 关闭并清除GPIOB、GPIOC和GPIOD端口的所有引脚的初始化。
3. 关闭SysTick定时器。
4. 将RCC寄存器重置为默认值,以恢复系统时钟为默认状态。
5. 禁用和清除所有中断。
6. 从应用程序地址中获取跳转地址,并将其设置为用户应用程序的入口点。
7. 初始化用户应用程序的堆栈指针。
8. 跳转到用户应用程序。
这段代码的目的是将系统切换到用户应用程序,并执行用户应用程序的代码。