问下delay_ms(500)怎么会延时5秒?

2019-07-20 00:52发布

各位高手,我学习跑马灯寄存器实验,按录像做下载后发现延时有问题,500ms实际延时了5秒,改成50是500ms,不知怎么回事?请高手指点,谢谢!
#include "stm32f4xx.h"
#include "led.h"
#include "delay.h"
int main(void)
{
delay_init(168);

  LED_Init();

   while(1){
    GPIOF->ODR &=~(1<<9);
   GPIOF->ODR &=~(1<<10);
   
   delay_ms(500);
   
   GPIOF->ODR |= 1<<9;
   GPIOF->ODR |= 1<<10;
   
   delay_ms(500);
  
  
  
  
  
  }







}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
Electronic
1楼-- · 2019-07-20 01:55
你没有初始化时钟,所以使用的是内部的RC振荡器,F4没记错的话就是16MHz的HSI,你的延时函数初始化是168MHz,但是你的实际频率只有16MHz,差不多就是相差10倍,所以你延时500ms,就延时了5s
zjbhm
2楼-- · 2019-07-20 03:12
 精彩回答 2  元偷偷看……
zjbhm
3楼-- · 2019-07-20 04:01
#include "led.h"
#include "stm32f4xx.h"


void LED_Init(void)
{
        RCC->AHB1ENR|= 1<<5;
       
        //F9
        GPIOF->MODER &= ~(3<<2*9);
        GPIOF->MODER |= 1<<(2*9);
        GPIOF->OSPEEDR &= ~(3<<2*9);
        GPIOF->OSPEEDR |=  2<<(2*9);
       
       
        GPIOF->PUPDR &= ~(3<<2*9);
        GPIOF->PUPDR |= 1<<(2*9);
       
       
       
        GPIOF->OTYPER  &= ~(1<<9);
        GPIOF->OTYPER  |= 0<<9;
       
        GPIOF->ODR |= 1<<9;
//        GPIOF->ODR &=~(1<<9);
       
        //F10
        GPIOF->MODER &= ~(3<<2*10);
        GPIOF->MODER |= 1<<(2*10);
        GPIOF->OSPEEDR &= ~(3<<2*10);
        GPIOF->OSPEEDR |=  2<<(2*10);
        GPIOF->PUPDR &= ~(3<<2*10);
        GPIOF->PUPDR |= 1<<(2*10);
        GPIOF->OTYPER  &= ~(1<<10);
        GPIOF->OTYPER  |= 0<<10;
       
        GPIOF->ODR |= 1<<10;  




}
zjbhm
4楼-- · 2019-07-20 05:58
就按录像写了这些内容
未知1908
5楼-- · 2019-07-20 10:30
 精彩回答 2  元偷偷看……
zjbhm
6楼-- · 2019-07-20 10:33
未知1908 发表于 2017-5-6 15:35
要看一下硬件的晶振是不是一样,系统的时钟配置是不是一样?比如原来是8M时钟,现在是800K的时钟,那么同样 ...

高手,问下硬件的晶振在哪里配置?

一周热门 更多>