|
本帖最后由 宏芯软件 于 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;
}
|
|