| 
 | 
 
 本帖最后由 宏芯软件 于 2016-4-27 23:24 编辑  
 
昨天在土豆网上看了小师妹的视频教材,照做的程序。编写这个这程序在搭建环境上课没有少费时间,Keil安装后本身没有自带STM32类库文件,导致打开官网的Demo编译。在QQ群里的到好心网友帮助,他用了Keil两年多了,他一看就知道缺少STM32类库(Keil.STM32F1xx_DFP.1.1.0.pack),传给我后通过安装包工具导入后,打开Demo源码直接编译通过。就是简单吧,但是不知道就摸不到头脑,浪费很长时间,不应该。如果首次使用Keil朋友可以先把STM32类库导入,这一步必须做的。 
下面上一下我的源代码 
#include <stdio.h> 
#include "stm32f10x.h" 
#include <stm32f10x_gpio.h> 
 
//LED灯变量 
GPIO_InitTypeDef GPIO_LED; 
//按键变量 
GPIO_InitTypeDef GPIO_KEY; 
//红外探测器 
GPIO_InitTypeDef GPIO_IR; 
 
 
int i=0; 
//四个LED等放入数组里便于循环访问 
uint16_t gpio_led[] = { 
                                                                                                        GPIO_Pin_1,        // 4# LED 
                                                                                                        GPIO_Pin_11,// 3# LED 
                                                                                                        GPIO_Pin_14,// 2# LED 
                                                                                                        GPIO_Pin_15        // 1# LED 
                                                                                        }; 
 
void Delay(int times) 
{ 
        int i = 0; 
        while(times--) 
        { 
                for(i=0;i<0x7fff; i++) 
                        ;//以占用cpu资源,浪费cpu时间,达到延迟目的 
        } 
} 
 
void init() 
{ 
        //init LED pin to GPIO 
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 
        GPIO_LED.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11 | GPIO_Pin_14 | GPIO_Pin_15; 
        GPIO_LED.GPIO_Mode = GPIO_Mode_Out_PP; 
        GPIO_LED.GPIO_Speed = GPIO_Speed_50MHz; 
        GPIO_Init(GPIOB, &GPIO_LED); 
        //init end 
         
        //init Key pin to GPIO 
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); 
        GPIO_KEY.GPIO_Pin = GPIO_Pin_13; 
        GPIO_KEY.GPIO_Mode = GPIO_Mode_IPU;//U=up 
        GPIO_KEY.GPIO_Speed = GPIO_Speed_50MHz; 
        GPIO_Init(GPIOC, &GPIO_KEY); 
        //init end 
         
        //init IR pin to GPIO 
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 
        GPIO_IR.GPIO_Pin = GPIO_Pin_7; 
        GPIO_IR.GPIO_Mode = GPIO_Mode_IPU;//U=up 
        GPIO_IR.GPIO_Speed = GPIO_Speed_50MHz; 
        GPIO_Init(GPIOB, &GPIO_IR); 
        //init end 
} 
 
int main(int argc, char **argv) 
{ 
        SystemInit(); 
        init();         
        while(1) 
        { 
                i %= 3; // 取莫,保证i不会大于3,实现跑马灯效果 1#LED等留给红外传感信号使用 
                GPIO_SetBits(GPIOB, gpio_led【i】); //点亮i#LED灯 
                Delay(10);//延迟 
                GPIO_ResetBits(GPIOB, gpio_led【i】);//熄灭 i#LED灯 
                Delay(50); 
                i++; 
                 
                //检查按键是否按下 Key1 按键按下 1#LED灯亮起    这个代码有问题,没有达到效果,不知道哪里出问题了 
                if(!GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13)) 
                { 
                        GPIO_SetBits(GPIOB, GPIO_Pin_15);//led 1# light 
                } 
                else 
                { 
                        GPIO_ResetBits(GPIOB, GPIO_Pin_15);//led 1# light 
                } 
                 
                //检查红外是否遮挡,如果红外传感器被挡住 1#LED亮起 
                if(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7)) 
                { 
                        GPIO_SetBits(GPIOB, GPIO_Pin_15);//led 1# light 
                } 
                else 
                { 
                        GPIO_ResetBits(GPIOB, GPIO_Pin_15);//led 1# light 
                } 
        } 
        return 0; 
} 
 
 
 |   
 
 
 
 |