收藏官网首页
查看: 8356|回复: 2

我编写第一个MCU的程序

4

主题

15

帖子

61

积分

注册会员

Rank: 2

积分
61
跳转到指定楼层
楼主
发表于 2016-4-24 11:19:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注册成为机智云开发者,手机加虚拟设备快速开发
本帖最后由 宏芯软件 于 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;
}


3

主题

70

帖子

529

积分

版主

Rank: 7Rank: 7Rank: 7

积分
529
沙发
发表于 2016-4-24 11:49:37 来自手机 | 只看该作者
看我的教程,应该没有导入库这一步

1

主题

14

帖子

65

积分

注册会员

Rank: 2

积分
65
板凳
发表于 2016-6-30 11:34:28 | 只看该作者
这是个main函数吧,能否分享一下你的完整程序。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表