给我编写一个关于stm32f103rct6的延时ms的函数
时间: 2023-06-07 18:06:57 浏览: 116
好的,以下是关于STM32F103RCT6的延时毫秒函数的代码:
```
void delay_ms(int ms)
{
for(int i=0;i<ms;i++)
{
//使用TIMER7计时器,时钟频率为72MHz
TIM7->CR1 |= 0x01; //开启计数器
TIM7->PSC = 71; //时钟预分频器
TIM7->ARR = 999; //自动重加载值
TIM7->CNT = 0; //清零计数器
while(TIM7->CNT < 1000); //等待计数器计数到1000
TIM7->CR1 &= ~(0x01); //关闭计数器
}
}
```
希望能够帮助到您!
相关问题
给我编写一个关于stm32f103rct6的延时函数
好的,以下是一个简单的延时函数:
void delay_ms(uint32_t ms) {
uint32_t i;
for (i = 0; i < ms; i++) {
uint32_t j;
for (j = 0; j < 72000; j++) {
__NOP();
}
}
}
这个函数使用嵌入式汇编NOP指令进行延时,72000次循环大约等于1毫秒的延时时间。您可以根据需要调整延时时间。
给我编写一个关于stm32f103rct6的延时us的函数
好的,以下是关于stm32f103rct6的延时us函数的代码:
```
void delay_us(uint32_t us) {
TIM2->ARR = us; //设置定时器2的自动重载寄存器为目标延时时间
TIM2->CNT = 0x00; //清除定时器2的计数器
TIM2->CR1 |= TIM_CR1_CEN; //开启定时器2
while((TIM2->SR & TIM_SR_UIF) == 0) {} //等待定时器2的计数完成
TIM2->CR1 &= ~TIM_CR1_CEN; //关闭定时器2
TIM2->SR &= ~TIM_SR_UIF; //清除定时器2的中断标志位
}
```
以上是一个简单的延时us函数,通过设置定时器的周期和开启/关闭定时器的方式实现。需要注意的是,在使用此函数时,需要预先初始化定时器2并开启与之对应的时钟(例如:`RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE)`)。此外,该函数只适用于延时比较短的情况,如果需要长时间的延时,则建议使用systick定时器或者其他更为精确的定时方式。
阅读全文