STM32F103RCT6延时函数
时间: 2024-05-01 10:22:28 浏览: 185
在 STM32F103RCT6 上,可以使用以下代码实现毫秒级延时函数:
```c
void delay_ms(uint16_t ms)
{
uint32_t delay = ms * (SystemCoreClock / 1000 / 8);
while(delay--) {}
}
```
其中 `SystemCoreClock` 是系统时钟频率,需要根据实际设置进行修改。这里假设时钟频率为 72MHz,每个循环耗时为 8 个时钟周期,因此计算出每毫秒需要循环的次数为 `(72MHz / 1000 / 8) = 9000`。最后等待的总循环次数即为 `delay = ms * 9000`。
相关问题
stm32f103rct6的延时函数
stm32f103rct6是一款基于Cortex-M3内核的微控制器,如果你想要实现延时功能,可以使用以下代码:
```c
void Delay_us(uint32_t nus)
{
uint32_t ticks;
ticks = nus * (SystemCoreClock / 1000000);
while (ticks--);
}
void Delay_ms(uint32_t nms)
{
uint32_t ticks;
ticks = nms * (SystemCoreClock / 1000 / 8);
while (ticks--);
}
```
其中,SystemCoreClock是系统时钟频率,可以通过调用以下函数获取:
```c
SystemCoreClock = HAL_RCC_GetSysClockFreq();
```
在使用延时函数时,可以根据需要自行调整参数。需要注意的是,由于延时函数是通过循环实现的,如果延时时间过长,会占用过多的CPU资源,因此在实际应用中,建议采用定时器等硬件定时方式实现延时功能。
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定时器后才能正常工作。
阅读全文