|
#include "stm32f10x.h"
/*void delay_us(u32 i) //此程序延时1us
{
u32 temp;
SysTick->LOAD=9*i; //设置重装数值, 72MHZ时
SysTick->CTRL=0X01; //使能,减到零是无动作,采用外部时钟源
SysTick->VAL=0; //清零计数器
do
{
temp=SysTick->CTRL; //读取当前倒计数值
}
while((temp&0x01)&&(!(temp&(1<<16)))); //等待时间到达
SysTick->CTRL=0; //关闭计数器
SysTick->VAL=0; //清空计数器
}*/
void delay_ms(volatile u32 i) //此程序延时1ms,,i不能大于1800,暂不知为什么,定时一分钟可以让delay_ms(1000)for循环60次来实现,需测试
{
volatile u32 temp;
SysTick->LOAD=9000*i; //设置重装数值, 72MHZ时
SysTick->CTRL=0X01; //使能,减到零是无动作,采用外部时钟源
SysTick->VAL=0; //清零计数器
do
{
temp=SysTick->CTRL; //读取当前倒计数值
}
while((temp&0x01)&&(!(temp&(1<<16)))); //等待时间到达
SysTick->CTRL=0; //关闭计数器
SysTick->VAL=0; //清空计数器
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStruct; //定义CPIO初始化类型定义
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能GPIOA的时钟
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13; //填入LED连接的引脚
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //设置该引脚的模式为推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //设置引脚的输出速度
GPIO_Init(GPIOC,&GPIO_InitStruct); //使用GPIO初始化函数 初始化 所需要用的引脚
while(1)
{
GPIO_ResetBits(GPIOC,GPIO_Pin_13); //给PA8低电平使小灯亮起来
delay_ms(1000);
GPIO_SetBits(GPIOC,GPIO_Pin_13); //给PA8高电平使小灯灭
delay_ms(1000);
}
}
这是一个led闪烁的程序,我在stm32f103c6t6上烧录就可以1s亮灭一次,但是在stm32f103c8t6上烧录灯就是一直亮,这是怎么回事,是买到了假货吗,我看c8t6的丝印确实有点模糊,但是c8t6的芯片延时改成delay_ms(100);的话也能看到闪烁,闪烁的特别快,改成1000就长亮。。。很奇怪啊
|
|