物联网工程施工

物联网工程施工

STM32最简单的外设莫过于IO口的高低电平控制了,这次将通过一个经典的跑马灯程序,带大家开启 STM32 之旅。

前提工作:把文件放入创好的文件夹中并创好项目

1.打开HARDWARE->LED文件下的led.c,输入以下代码

 

#include "led.h"

//初始化 PA8 和 PD2 为输出口.并使能这两个口的时钟

void LED_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|

RCC_APB2Periph_GPIOD, ENABLE); //使能 PA,PD 端口时钟

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-->PA.8 端口配置

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO 口速度为 50MHz

GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA.8

GPIO_SetBits(GPIOA,GPIO_Pin_8); //PA.8 输出高

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1-->PD.2 端口配置, 推挽输出

GPIO_Init(GPIOD, &GPIO_InitStructure); //推挽输出 ,IO 口速度为 50MHz

GPIO_SetBits(GPIOD,GPIO_Pin_2); //PD.2 输出高

}

2.在 led.h 中输入如下代码:

 

#ifndef __LED_H

#define __LED_H

#include "sys.h"

//LED 端口定义

#define LED0 PAout(8) // PA8

#define LED1 PDout(2) // PD2

void LED_Init(void);//初始化

#endif

这段代码里面最关键就是 2 个定义:

#define LED0 PAout(8) // PA8

#define LED1 PDout(2) // PD2

这里使用的是位带操作来实现操作某个 IO 口的 1 个位的

接着,我们点击Manage Project Items 管理

在里面新建一个 HARDWARE 的组,并把 led.c 加入到这个组里面,如图所示:

点击OK结束,然后你会发现在 Project Workspace 里面多了一个 HARDWARE 的组,在该组下面有一个 led.c 的文件如图所示:

 

接着点击这个

 按照以下步骤在里面将 led.h 头文件的路径加入到工程里面

回到主界面,在 main 函数里面编写如下代码:

 #include "led.h"

#include "delay.h"

#include "sys.h"

int main(void)

{

delay_init(); //延时函数初始化

LED_Init(); //初始化与 LED 连接的硬件接口

while(1)

{ LED0=0;

LED1=1;

delay_ms(300); //延时 300ms

LED0=1;

LED1=0;

delay_ms(300); //延时 300ms

}

}

最后我们按下,编译工程,得到下图:

可以看到没有错误,也没有警告。从编译信息可以看出,我们的代码占用 FLASH 大小为: 1886 字节(1560+336),所用的 SRAM 大小为:1864 个字节(32+1832)。 这里我们解释一下,编译结果里面的几个数据的意义:

Code:表示程序所占用 FLASH 的大小(FLASH)。

RO-data:即 Read Only-data,表示程序定义的常量,如 const 类型(FLASH)。

RW-data:即 Read Write-data,表示已被初始化的全局变量(SRAM)

ZI-data:即 Zero Init-data,表示未被初始化的全局变量(SRAM)

有了这个就可以知道你当前使用的 flash 和 sram 大小了,所以,一定要注意的是程序的大 小不是.hex 文件的大小,而是编译后的 Code 和 RO-data 之和。接下来,我们就先进行软件仿真,验证一下是否有错误的地方,然后下载到 miniSTM32开发板看看实际运行的结果。

按照步骤新建两个信号PA8和PD2。

 Display Type 选择 bit,然后单击 Close 关闭该对话框,可以看到逻辑分析窗口出来了两个信号

 接着,点击运行,过一段时间后按下,暂停仿真,得到下图:

 这里注意 Gird 要调节到 0.5s 左右比较合适,可以通过 Zoom 里面的 In 按钮来放大波形,通过 Out 按钮来缩小波形,或者按 All 显示全部波形。从上图中可以看到 PORTA.8 和 PORTD.2 交替输出,周期可以通过中间那根红线来测量。至此,我们的软件仿真已经顺利通过。在软件仿真没有问题了之后,我们就可以把代码下载到开发板上,看看运行结果是否与我们仿真的一致。至此,我们的这次学习就结束了,本章作为 STM32 的入门基础,介绍了 STM32 的 IO 口操作,进一步介绍了 MDK 的软件仿真功能。希望大家好好理解一下。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值