打印

【STM32F0实验】从零开始学STM32F0单片机--流水灯

[复制链接]
9751|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
reayfei|  楼主 | 2012-8-23 23:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 reayfei 于 2012-8-23 23:55 编辑

      STM32F051R8T6 内置64KB 闪存、8 KB RAMRTC、定时器、ADCDAC、电压比较和通信接口,采用 LQFP64 封装。

4 LED 指示灯
- LD1 (
) 表示连接3.3V电源

- LD2 (
/ 绿) 表示USB 通信

- LD3 (
绿) 表示PC9 输出状态

- LD4(
蓝)表示PC8输出状态

STM32F0探索套件的硬件框图:

了解了硬件的设计,下面新建一个工程:

添加stm32f0_discovery.csystem_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:

从零开始学STM32F0单片机--流水灯.pdf

325.78 KB

沙发
reayfei|  楼主 | 2012-8-27 09:03 | 只看该作者
顶一个

使用特权

评论回复
板凳
figo20042005| | 2012-8-27 11:26 | 只看该作者
顶LZ

使用特权

评论回复
地板
reayfei|  楼主 | 2012-8-27 13:18 | 只看该作者
3# figo20042005 谢谢支持

使用特权

评论回复
5
lw0306| | 2012-8-27 13:39 | 只看该作者
顶一个

使用特权

评论回复
6
reayfei|  楼主 | 2012-8-27 22:36 | 只看该作者
5# lw0306 多谢支持!

使用特权

评论回复
7
kkzz| | 2012-8-28 10:29 | 只看该作者
讲解的很基础,建立工程很重要!

使用特权

评论回复
8
youimiss| | 2012-8-28 17:21 | 只看该作者
顶!

使用特权

评论回复
9
ckr| | 2012-8-28 19:11 | 只看该作者
顶下,

使用特权

评论回复
10
weiweiyixiao| | 2012-8-28 19:17 | 只看该作者
顶一下,

使用特权

评论回复
11
reayfei|  楼主 | 2012-8-31 15:44 | 只看该作者
10# weiweiyixiao 谢谢支持

使用特权

评论回复
12
max-men| | 2012-9-1 21:05 | 只看该作者
必需顶一个啊

使用特权

评论回复
13
huangyunfa| | 2012-9-1 22:01 | 只看该作者
LZ辛苦了。。。。谢谢。。

使用特权

评论回复
14
lixupengarm| | 2012-9-2 01:09 | 只看该作者
学习了 看到了熟悉的代码了

使用特权

评论回复
15
reayfei|  楼主 | 2012-9-3 16:34 | 只看该作者
12# max-men 谢谢支持

使用特权

评论回复
16
jianjdand21| | 2012-9-5 08:35 | 只看该作者

使用特权

评论回复
17
wago2008| | 2012-11-22 16:21 | 只看该作者
真心不错

使用特权

评论回复
18
飞仔的梦想| | 2012-11-22 21:12 | 只看该作者
不错,其实很早就打算玩这款MCU了,貌似功能很强大哈:lol

使用特权

评论回复
19
bh7kve| | 2012-11-23 00:36 | 只看该作者
int main()
{
        SystemInit();
启动的时候不是调用过一次这个函数了吗?为啥还要在主函数中再来一次呢?

使用特权

评论回复
20
wago2008| | 2012-11-23 09:45 | 只看该作者
太有用了谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:WiFi包邮:http://item.taobao.com/item.htm?id=19254130983

15

主题

395

帖子

2

粉丝