使用的是官方固件庫3.4版本!!!!前提是配置好編譯器纔可以執行!!
配置流程:
1:系統時鐘初始化,包括系統時鐘和要開放的IO口或者功能的時鐘配置。
2:IO口初始化,包括引腳,速率,輸入輸出模式等。
注意!!!
1:與51系列不同的是IO口還需要配置時鐘,這是STM32省電的一種技巧。
2:IO口需設置爲通用IO口,推輓輸出。
IO的輸出配置可以是推輓模式和開漏模式,具體區別看參考手冊108頁。
IO口的一般配置流程:
GPIO_InitTypeDef GPIO_InitStructure;//定義 GPIO_InitStructure爲 GPIO_InitTypeDef結構體類型
特別注意用庫函數的話一定要定義結構體類型!!!!!!!!不僅是GPIO像串口等等的初始化都需要定義結體, 具體類型可以查看官方庫
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//引腳選擇
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推輓輸出
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化
3:關於系統時鐘:系統時鐘可以是外接晶振的倍頻。我用9倍頻!在官方庫中選擇好定義的宏,直接調用函數即可實現RCC的設置,具體頻率設定由system_stm32f10xx.c(默認目錄在ARM/Startup/ST)文件中得宏定義,開放哪一個宏,當調用SystemInit()庫函數時,程序可以把頻率設定好。
系統時鐘的配置流程:
void RCC_Configuare(void)
{
SystemInit();//頻率設定有system_stm32f10x.c文件中的宏定義 開放某個宏 當調用SystemInit()時即可設置好頻率
RCC_ClockSecuritySystemCmd(ENABLE);//使能或者失能時鐘安全系統
}
#include"stm32f10x.h"
#define LED0_ON GPIO_SetBits(GPIOA,GPIO_Pin_8) // LED0開
#define LED0_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_8)//LED0關
#define LED1_ON GPIO_SetBits(GPIOD,GPIO_Pin_2) //LED1開
#define LED1_OFF GPIO_ResetBits(GPIOD,GPIO_Pin_2)//LED1關
//初始化IO端口
void IO_Configuart(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定義 GPIO_InitStructure爲 GPIO_InitTypeDef結構體類型
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//允許總線CLOCK,在使用GPIO之前必須允許相應的端口時鐘
//配置GPIOA_8
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//引腳選擇
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推輓輸出
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化
//配置GPIOD_2
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//引腳選擇
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推輓輸出
GPIO_Init(GPIOD,&GPIO_InitStructure);//初始化
}
//復位和系統時鐘控制
void RCC_Configuare(void)
{
SystemInit();//頻率設定有system_stm32f10x.c文件中的宏定義 開放某個宏 當調用SystemInit()時即可設置好頻率
RCC_ClockSecuritySystemCmd(ENABLE);//使能或者失能時鐘安全系統
}
void Delay(u16 speed)
{
u16 i=0;
while(speed!=0)
{
speed--;
for(i=0;i<400;i++);
}
}
int main(void)
{
IO_Configuart();
RCC_Configuare();
while(1)
{
LED0_ON;
LED1_OFF;
Delay(2000);
LED0_OFF;
LED1_ON;
Delay(2000);
}
}
#include"stm32f10x.h"
#define LED0_ON GPIO_SetBits(GPIOA,GPIO_Pin_8) // LED0開
#define LED0_OFF GPIO_ResetBits(GPIOA,GPIO_Pin_8)//LED0關
#define LED1_ON GPIO_SetBits(GPIOD,GPIO_Pin_2) //LED1開
#define LED1_OFF GPIO_ResetBits(GPIOD,GPIO_Pin_2)//LED1關
//初始化IO端口
void IO_Configuart(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定義 GPIO_InitStructure爲 GPIO_InitTypeDef結構體類型
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//允許總線CLOCK,在使用GPIO之前必須允許相應的端口時鐘
//配置GPIOA_8
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//引腳選擇
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推輓輸出
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化
//配置GPIOD_2
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//引腳選擇
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//50MHz速率
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推輓輸出
GPIO_Init(GPIOD,&GPIO_InitStructure);//初始化
}
//復位和系統時鐘控制
void RCC_Configuare(void)
{
SystemInit();//頻率設定有system_stm32f10x.c文件中的宏定義 開放某個宏 當調用SystemInit()時即可設置好頻率
RCC_ClockSecuritySystemCmd(ENABLE);//使能或者失能時鐘安全系統
}
void Delay(u16 speed)
{
u16 i=0;
while(speed!=0)
{
speed--;
for(i=0;i<400;i++);
}
}
int main(void)
{
IO_Configuart();
RCC_Configuare();
while(1)
{
LED0_ON;
LED1_OFF;
Delay(2000);
LED0_OFF;
LED1_ON;
Delay(2000);
}
}