直接给我stm32f103rct6的微秒延时函数
时间: 2024-05-06 08:19:17 浏览: 109
当然,为您提供延时函数:
```
void delay_us(uint32_t us) {
// 使用SysTick时钟240MHz
SysTick->CTRL &= ~(SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk);
SysTick->LOAD = us * 240U - 1U;
SysTick->VAL = 0;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0);
}
```
相关问题
STM32F103RCT6延时1u秒函数
在STM32F103RCT6上实现1微秒的延时函数需要使用内部定时器。下面是一个基于SysTick定时器的延时函数示例,可以实现1微秒的延时:
```c
void delay_us(uint32_t us)
{
uint32_t ticks;
uint32_t start = SysTick->VAL;
uint32_t reload = SysTick->LOAD;
ticks = us * (SystemCoreClock / 1000000);
while (ticks)
{
if ((SysTick->VAL <= start) || ((SysTick->VAL - start) > ticks))
{
ticks = 0;
}
else
{
ticks -= (SysTick->VAL - start);
start = SysTick->VAL;
}
}
}
```
该函数的实现方式是获取当前SysTick的VAL值,计算出需要延时的SysTick滴答数,然后在循环中等待,直到SysTick计数器减少了所需的滴答数。请注意,该函数需要在启用SysTick定时器后才能正常工作。
stm32f103rct6例程
引用\[1\]和\[2\]提供了关于延时函数的代码示例,其中使用了SysTick定时器来实现延时。在这些代码中,延时函数分为延时微秒和延时毫秒两种。延时微秒的函数使用了内核时钟,每减1代表时间过了1/8微秒。延时毫秒的函数使用了内核时钟,每减1代表时间过了1/8000毫秒。这些函数通过加载计数器和等待计数器值达到指定值来实现延时。引用\[3\]提供了另一种延时函数的实现方法,其中使用了循环来实现延时,延时微秒的函数每次循环7次,延时毫秒的函数每次循环7000次。
根据提供的引用内容,可以看出这些代码是用于STM32F103RCT6的例程。这些代码可以用于实现延时功能,可以根据需要进行调整和使用。
#### 引用[.reference_title]
- *1* *2* *3* [stm32f103rct6使用内部晶振作为时钟源](https://blog.csdn.net/qq_45539458/article/details/129714873)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文