本帖最后由 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:
|