stm32F103 us级延时
时间: 2023-08-11 12:03:06 浏览: 51
在 STM32F103 微控制器中,可以使用 SysTick 定时器来实现微秒级延时。SysTick 定时器是一个24位向下计数器,可以用来生成周期性的中断。
以下是一个示例代码,实现了 1 微秒的延时功能:
```c
void delay_us(uint32_t us)
{
uint32_t ticks = us * (SystemCoreClock / 1000000); // 计算需要的 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->CTRL = 0; // 关闭定时器
}
```
在这个函数中,我们首先将需要延时的微秒数转换成需要的 SysTick 滴答数,然后配置 SysTick 定时器并启动它。在等待延时时间到达时,我们轮询 SysTick 的 COUNTFLAG 标志位,直到它被置位,表示时间到达了。最后关闭定时器。
相关问题
stm32F103 us级延时不用定时器
在STM32F103中,可以使用内置的SysTick定时器来实现微秒级的延时,而不需要使用外部定时器。SysTick定时器是一个24位的向下计数器,可以用来产生精确的时间基准。以下是使用SysTick实现微秒级延时的示例代码:
```c
// 使能SysTick定时器
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
// 计算SysTick每个tick的时间
// 假设系统时钟频率为72MHz
uint32_t tick_time_us = 1000000 / SystemCoreClock;
// 微秒级延时函数
void delay_us(uint32_t us) {
uint32_t start_tick = SysTick->VAL;
uint32_t target_tick = start_tick - us * tick_time_us;
if (target_tick > start_tick) {
// 如果计数器溢出,需要加上计数器的最大值
target_tick += SysTick->LOAD + 1;
}
while (SysTick->VAL > target_tick);
}
```
在这个示例代码中,我们首先使能了SysTick定时器,并计算出每个tick的时间。然后,我们定义了一个名为`delay_us`的函数,用于实现微秒级延时。在函数中,我们首先获取当前的SysTick计数器值,然后计算出目标计数器值。最后,我们在一个循环中等待SysTick计数器达到目标值。当计数器溢出时,我们需要加上计数器的最大值。
stm32f103c8t6延时ms
要在STM32F103C8T6上进行毫秒级延时,可以使用Delay_ms函数。该函数通过调用Delay_us函数实现,其中Delay_us函数使用SysTick定时器进行微秒级延时。以下是Delay_ms函数的代码:
```c
void Delay_ms(uint32_t xms) {
while(xms--) {
Delay_us(1000);
}
}
```
通过调用Delay_ms函数并传入所需的延时时间(以毫秒为单位),即可实现延时操作。请注意,该延时函数的精度可能会有一定的误差,但不会影响使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [STM32F103延时函数](https://download.csdn.net/download/pingdangjun/9434542)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [STM32F103C8T6延时函数和OLED显示屏代码](https://blog.csdn.net/HX091624/article/details/127398287)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [STM32F103C8T6.zip](https://download.csdn.net/download/CJH_12345_/12416461)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]