如果无法查看图片,请直接访问我的博客地址:http://showvi.com/Blog/CategoryAirticleList/90
上一章我们已经设置好ECLIPSE的开发环境,那么接下来所讲的都是基于ECLIPSE上进行开发,当然代码和在MDK里都是一样的,你也可以把 这里提到的代码放到MDK里进行编译运行。
在STM32里,每一个IO设备在使用前都必需进行初始化,且打开IO对应的时钟后才能使用,这是我学51和STM32最大的区别之一,51很简 单,无需初始化就可以直接操作每一个IO口。好了,先来体验一下ECLIPSE开发带来的快感吧,打开ECLIPSE,选择FirstProject项 目,打开main.c,先在顶部输入#include < ,然后按下ALT+/ ,可以选择我们需要的类库。
在main函数里试一下输入GPIO,然后按快捷键ALT+/ ,看到了吗,FWLIB的函数、常量等都一一列出来了,以后不会因为输错字母或者大小写问题导致出错了。
ECLIPSE的优点就讲到这了,还有很多功能大家慢慢发挖吧。
代码比较简单,且都有注释了,我就直接贴出来好了。
/**
******************************************************************************
* @file Project/Template/main.c
* @author MCD Application Team
* @version V3.1.2
* @date 09/28/2009
* @brief Main program body
******************************************************************************
* @copy
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2009 STMicroelectronics</center></h2>
*/
/* Includes ——————————————————————*/
#include “stm32f10x.h”
#include <stm32f10x_gpio.h>
#include <stm32f10x_rcc.h>
/** @addtogroup Template_Project
* @{
*/
/* Private functions ———————————————————*/
/**
* @brief Main program.
* @param None
* @retval None
*/
GPIO_InitTypeDef gpio_int;
int main(void)
{
/* Setup STM32 system (clock, PLL and Flash configuration) */
SystemInit();
//打开通用IO口A的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//设置OA口A的初始化信息,模式为GPIO_Mode_Out_PP,指定PIN为0,速度为50MHz
gpio_int.GPIO_Mode=GPIO_Mode_Out_PP;
gpio_int.GPIO_Pin=GPIO_Pin_0;
gpio_int.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&gpio_int);
//清除PIN0的值
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
//设置PIN0的值为高位,即点亮IOA的PIN0脚
GPIO_SetBits(GPIOA,GPIO_Pin_0);
/* Add your application code here
*/
/* Infinite loop */
while (1)
{
}
}
/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
在这里教大家一个巧门,在FWLIB3.12里的函数中,大部份函数的参数都和参数命名相关,即参数名是实际常量的一部分,如:
函数原型:void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
实际使用:GPIO_ResetBits(GPIOA,GPIO_Pin_0);
发现这个对我们开发有什么帮助呢?呵呵,这个用处就大了,不过我估计在ECLIPSE中才会显得更加有用,举个例子,在ECLIPSE中输入:
GPIO_ResetBits( 这个位置按下ALT+/ 会有相应的提示信息,请看下图
看到了吧,我们在实际使用函数时,对于参数,直接输入ECLIPSE提示里的参数名称加“_”线,然后按ALT+/,直接选择相应的常量就可以了, 以后我们就不用翻来翻去的找这些常量的名称是什么了。
另外再讲一个KEILMAKE的实用配置,上一章我们说了设置编译时候的参数,如果我们需要调试,只要在ECLIPSE编译参数里的最后位置加上一 个参数 debug 就可以调用MDK进行调试,那么如果要上传到开发板上呢?把debug改为upload即可,分别把这三种创建成配置即可,如图:
看到了吗,已经成功上传到开发板上了,这时板上的GPIOA的PIN0脚的二极管已经点亮了。