本帖最后由 reayfei 于 2012-8-23 23:55 编辑
STM32F051R8T6 内置64KB 闪存、8 KB RAM、RTC、定时器、ADC、DAC、电压比较和通信接口,采用 LQFP64 封装。
4 支LED 指示灯:
- LD1 ( 红) 表示连接3.3V电源
- LD2 ( 红/ 绿) 表示USB 通信
- LD3 ( 绿) 表示PC9 输出状态
- LD4( 蓝)表示PC8输出状态
STM32F0探索套件的硬件框图:
了解了硬件的设计,下面新建一个工程:
添加stm32f0_discovery.c和system_stm32f0xx.c时,出现如下问题:
原来,是没有Rebuild,点击一下就编译过了,哈哈。
首先,说明一下下面文件的作用:
core_cm0.c/h
该文件是内核访问层的源文件和头文件。
stm32f0xx.h
该文件是外设访问层的头文件,该文件是最重要的头文件之一。例如定义了CPU是哪种容量的CPU,中断向量等等。除了这些该头文件还定义了和外设寄存器相关的结构体。
所以在应用文件中(例如自己编写的main源文件)只需要包含stm32f0xx.h即可,而不是以前固件库的需要包含stm32f0xx_conf.h这个头文件。
system_stm32f0xx.c/h
该头文件也可以称为外设访问层的头文件和源文件。在该文件中可以定义系统的时钟频率,定义低速时钟总线和高速时钟总线的频率,其中最关键的函数就是SystemInit()了。
stm32f10x_it.c/h
这两个文件包含了stm32中断函数,在源文件和头文件中并没有把所有的中断入口函数都写出来,而只写了ARM内核的几个异常中断,其他的中断函数需要用户自己编写。
StdPeriph_Driver文件夹
该文件夹又包含两个文件夹,一个是src文件夹,另一个是inc文件夹。一个里面放的是库函数文件,一个里面放的是对应的头文件。外设的驱动相当于windows的驱动函数API,这些驱动函数看到函数名基本就可以明白这个函数的作用,例如:GPIO_SetBits可以置位某个IO口,相反GPIO_ResetBits则可以复位某个IO口。
stm32f0xx_rcc.c 此文件提供的固件功能的复位和时钟控制(RCC)外设管理以下功能:
1 内部/外部时钟,PLL,CSS和MCO配置
2 系统,AHB,APB总线时钟配置
3 外设时钟配置
4 中断和标志管理
我在调试时,出现过这个错误:
..\..\..\Libraries\STM32F0xx_StdPeriph_Driver\src\stm32f0xx_rcc.c(199): warning:
#223-D: function "assert_param"declared implicitly 在Define框内输入“USE_STDPERIPH_DRIVERSTM32F0XX”
我的文件树结构:
按照上图添加好文件后,还要关联头文件,否则,会找不到调用的头文件信息。
需要说明在main.c文件里有这样一句:
GPIO_InitTypeDef GPIO_InitStructure; 作用是定义GPIO宏操作结构体
#include "stm32f0xx.h"
#define uchar unsigned char
#define uint unsigned int
#define LEDn 2
#define LED3_PIN GPIO_Pin_9
#define LED3_GPIO_PORT GPIOC
#define LED3_GPIO_CLK RCC_AHBPeriph_GPIOC
#define LED4_PIN GPIO_Pin_8
#define LED4_GPIO_PORT GPIOC
#define LED4_GPIO_CLK RCC_AHBPeriph_GPIOC
GPIO_TypeDef* GPIO_PORT[LEDn] = {LED3_GPIO_PORT, LED4_GPIO_PORT};
const uint16_t GPIO_PIN[LEDn] = {LED3_PIN, LED4_PIN};
const uint32_t GPIO_CLK[LEDn] = {LED3_GPIO_CLK, LED4_GPIO_CLK};
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO宏操作结构体
void delay()
{
uint x,y;
for(x=0;x<1000;x++)
for(y=0;y<1000;y++);
}
void Init_Gpio(char Led)
{
/* Enable the GPIO_LED Clock */
RCC_AHBPeriphClockCmd(GPIO_CLK[Led], ENABLE);
/* Configure the GPIO_LED pin */
GPIO_InitStructure.GPIO_Pin = GPIO_PIN[Led];
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIO_PORT[Led], &GPIO_InitStructure);
}
int main()
{
SystemInit();
Init_Gpio(0);
Init_Gpio(1);
while(1)
{
GPIO_SetBits(GPIOC, GPIO_Pin_8); //PC8口输出高电平
GPIO_ResetBits(GPIOC, GPIO_Pin_9); //PC9口输出低电平
delay();
GPIO_SetBits(GPIOC, GPIO_Pin_9); //PC9口输出高电平
GPIO_ResetBits(GPIOC, GPIO_Pin_8); //PC8口输出低电平
delay();
}
}
文件Main.c:
|