|
#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就長亮。。。很奇怪啊
|
|