我们导师给STM32变了一个函数框架,让我们用这个框架来练习,之前用的是原子给编的函数,想在这个框架上运行一下,我们导师用的也是库函数3.5版本,用了那个延时函数怎么不行?下边是函数部分,delay_ms()产生的不是1ms延时,请问这是怎么回事? #include "stm32f10x.h"
#include "stm32_Init.h"
#include "Retarget.h"
#include "stm32f10x_IRQ.h"
void delay_ms(u32 n) //查询方式产生1ms延时
{
SysTick->CTRL=0x00; //选择外部时钟源,即HCLK
SysTick->VAL=0x00; //清空计数器
SysTick->LOAD=n*72000; //装载计数器
SysTick->CTRL|=0x01; //开始倒数
while(!(SysTick->CTRL&(1<<16))); //等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL=0x00; //清空计数器
}
main()
{
SystemInit();
SystemCoreClockUpdate(); //在系统时钟SystemCoreClock变化的时候调用,以更新一个全局变量SystemCoreClock,默认SystemCoreClock=72MHz
//SysTick_Config(SystemCoreClock/100); // 10ms SysTick interrupt
stm32_Init();
EnableIRQs();
// RCC->APB2ENR|=1<<3; //使能PORTB时钟 (位操作)
// RCC->APB2ENR|=1<<6; //使能PORTE时钟
RCC->APB2ENR|=0x0048; //使能PORTB、PORTE时钟 (字操作)
GPIOB->CRL&=0XFF0FFFFF; //清除PB.5原来位的设置,同时不影响其他位的设置
GPIOB->CRL|=0X00300000; //PB.5 推挽输出
GPIOB->ODR|=1<<5; //PB.5 输出高
GPIOE->CRL&=0XFF0FFFFF; //清除PE.5原来位的设置,同时不影响其他位的设置
GPIOE->CRL|=0X00300000; //PE.5推挽输出
GPIOE->ODR|=1<<5; //PE.5输出高
while(1)
{
GPIOB->BSRR=0x00000020; // 点亮LED0
GPIOE->BSRR=0x00200000; // 熄灭LED1
delay_ms(500);
GPIOB->BSRR=0x00200000; // 熄灭LED0
GPIOE->BSRR=0x00000020; // 点亮LED1
delay_ms(500);
}
}
|