Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10040
  • 博文数量: 6
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-20 09:37
文章分类
文章存档

2016年(6)

我的朋友

分类: 嵌入式

2016-07-20 14:09:49

前面讲了这么多,主要是硬件设计方面,如果不关心电路硬件和机械硬件设计的童鞋基本上可以一看了之,不要太关心。下面才是码农的最核心的地方。说了那么多,至今也没有讲C语言的半毛钱值钱的东西。从现在开始就开始慢慢讲解了,但是,我们的这个模块实际上并不适合一级菜鸟,还是需要有一定基础才能理解我们的教程的,否则还是会云里雾里,一片茫然。
电路硬件也是需要一定基础的。从STM32的开发开始,实际上就是从C语言的基础开始,最好能有C语言计算机二级的开发能力,二级是个很简单的事情。我们不讨论这些了。
首先看一下对LED小灯的点亮操作。这里总共有9个LED小灯,有8个是使用IO口进行操作,另外一个表示电源指示灯。


2-1 STM32硬件电路与驱动开发快速入门
当我们的电路主板通电之后,DS10会直接被点亮,表示主板电量供电正常。剩下的8个就可以虽然让我们玩耍了,根据LED小灯的位置,可以随意的让其显示不同的显示效果,以达到绚丽和信息显示的功能。
这里我们使用的KEIL这款IDE,同样,我们也有利用Eclipse来开发C/C++应用的。因为KEIL的配置十分的傻瓜,所以,我们只需要安装好,简单的进行配置,就可以胜任C/C++下的STM32开发。如果大家对STM32开发的最基础的知识也不了解的话,后面我们还有详细的教程,会及时更新。
这个就是win7下的KEIL软件的界面,目前只有英文,没有中文的,但是因为它的功能太简单了,所以,使用英文是不会对英文瘸腿的人有任何障碍的,不用花费时间去汉化这个软件。
2-1 STM32硬件电路与驱动开发快速入门

        我们先来看看一下如何点亮一个LED小灯。基本上现在开发STM32的硬件,都是使用ST官方提供的固件库,开发速度相当的快,操作GPIO也非常的简单,有时候可以不用直接去操作寄存器来实现IO的操作了。那么我们看一下结果LED的连接情况,以LED1为例。
2-1 STM32硬件电路与驱动开发快速入门
        LED1是连接到PB3引脚上的,也就是GPIOP.3引脚。那么我们通过对PB3进行控制就可以达到控制LED1的点亮和熄灭了,如果是高电平,那么LED1就会熄灭,当它为低电平的时候就会被点亮。当然还有一种就是让LED小灯可以达到朦胧的状态,慢慢的点亮和慢慢的熄灭,这需要使用PWM技术来控制IO的电压输出,后面我们会在电机方面的控制讲解这个功能,一般情况是需要配合引脚上面对应的TIM功能来实现的。好了废话了。
首先是搭建CMSIS和ST官方固件库开发框架,这个框架模板网上非常多,这里使用的芯片是STM32F103C8T6,基本兼容STM32的固件库模板。我们自己手动搭建可以参考网上教程。
搭建好的官方固件库需要注意,在Target Driver中需要选择STM32的中等容量芯片,否则下载的时候会出错。
2-1 STM32硬件电路与驱动开发快速入门
工程模板的下载地址:
然后直接可以在main函数中进行代码撰写了。需要注意的是,为了更好的突出功能模块的分类。我们尽可能的在一个新的C代码文件中,撰写新的模块功能,比如LED小灯的相关函数及初始化操作,可以在led.c文件中撰写。
简单的看一下LED的初始化代码:

点击(此处)折叠或打开

  1. #ifndef __LED_H
  2. #define __LED_H
  3. #include "sys.h"

  4. //LED控制
  5. #define LED1 PBout(3) //LED1
  6. #define LED2 PBout(4) //LED2
  7. #define LED3 PAout(3) //LED3
  8. #define LED4 PBout(12) //LED4
  9. #define LED5 PBout(13) //LED5
  10. #define LED6 PAout(8) //LED6
  11. #define LED7 PAout(1) //LED7
  12. #define LED8 PAout(12) //LED8

  13. void LED_Init(void);//初始化
  14.    
  15. #endif
下面是C代码:

点击(此处)折叠或打开

  1. #include "led.h"

  2. void LED_Init(void)
  3. {
  4. GPIO_InitTypeDef GPIO_InitStructure;
  5. //时钟
  6. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);
  7. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推免输出
  8. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_12|GPIO_Pin_13; //GPIOB使用4个IO口控制LED
  9. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //50MHz
  10. GPIO_Init(GPIOB,&GPIO_InitStructure);
  11. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_8|GPIO_Pin_12; //GPIOA使用4个IO口控制LED
  12. GPIO_Init(GPIOA,&GPIO_InitStructure);
  13. //LED默认状态熄灭
  14. LED1=1;
  15. LED2=1;
  16. LED3=1;
  17. LED4=1;
  18. LED5=1;
  19. LED6=1;
  20. LED7=1;
  21. LED8=1;
  22. }
因为这里操作了一个JTAG的接口,STM32F103系列的芯片,在控制的时候,如果复用JTAG接口修重新设定,这里暂时不讲IO口的复用功能。下面开始讲解C语言较难得宏定义了。


阅读(1704) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~