stm32f4使用168Mhz的外部时钟作为systick的时钟源,请写一个定时10ms的初始化函数。
时间: 2023-03-13 22:24:33 浏览: 90
答:要实现Systick的10ms定时,可以使用以下函数:void SysTick_Init(uint32_t ticks)
{
// 配置外部时钟源,168MHz
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
// 设置允许定时时长,10ms
SysTick_Config(ticks);
}
相关问题
STM32F429IGT6写一个初始化延时函数
以下是一个使用SysTick延时的STM32F429IGT6初始化延时函数的示例代码:
```c
#include "stm32f4xx.h"
void delay_ms(uint32_t ms)
{
SystemCoreClockUpdate();
// 计算SysTick重载值
uint32_t ticks = SystemCoreClock / 1000 * ms;
// 初始化SysTick
SysTick->LOAD = ticks - 1;
SysTick->VAL = 0;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;
// 等待延时结束
while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0);
// 关闭SysTick
SysTick->CTRL = 0;
}
```
该函数接受一个毫秒数作为参数,并使用SysTick定时器进行延时。它首先更新系统时钟,并计算出SysTick计数器的重载值,然后初始化SysTick并等待延时结束。最后,它关闭SysTick计时器以避免影响其他代码的执行。
请注意,此代码假定SysTick时钟源设置为系统时钟,并且系统时钟已经正确配置。如果您的系统时钟源不同或者未正确配置,您需要相应地更改此代码。
使用systick库函数写一个ms级的延时函数
以下是使用systick库函数编写的ms级延时函数:
```c
#include "stm32f4xx.h"
void SysTick_Handler(void) {
// 空函数,不需要做任何事情
}
void delay_ms(uint32_t ms) {
// 配置SysTick定时器
SysTick->LOAD = (uint32_t)(ms * (SystemCoreClock / 1000));
SysTick->VAL = 0x00;
SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
while(!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)); // 等待定时器计数完成
SysTick->CTRL &= ~(SysTick_CTRL_ENABLE_Msk); // 关闭定时器
}
```
使用方法:
```c
int main(void) {
// 初始化SysTick定时器
SysTick_Config(SystemCoreClock / 1000);
// 延时1秒
delay_ms(1000);
// 无限循环
while(1) {
}
}
```
注意:在使用此延时函数前,需要先初始化SysTick定时器。在本例中,我使用了`SysTick_Config`函数来初始化SysTick定时器,并将SysTick定时器的时钟源配置为系统时钟,每隔1ms触发一次中断。由于SysTick定时器的计数值是由CPU时钟除以预分频值得到的,因此在不同的MCU上可能需要根据实际情况调整代码中的`SystemCoreClock`值。