点击NEXT,开始ISP下载程序。下载结束后点击Finish完成下载
断电并拔下BOOT0的短接帽。重新上电即可运行下载的程序。
3.4.2 J-link下载说明
安装JLink ARM_V400a程序将JLINK的连接线的凸起对准盘古UE-STM32F103开发板上的JTAG插座(1XS11)的凹进部分插好,运行安装好的“J-Flash ARM V4.00a”
点击“OPTIONS”下的“Project settings”
点击CPU,如图选择芯片型号,然后点击确定返回到主菜单环境:
点击File下的Open菜单键,选择需要烧写的合适的文件路径后,如图
点击Target下的Connect,如果JLINK与开发板连接正确,在底部的窗口将会显示Connected successfully;
点击Target下的Erase Chip,删除芯片的程序空间,成功后将提示相关信息;
点击Target下的Auto,自动将需要烧写的程序写入到芯片内,成功后将提示相关信息。中间如有提示信心,直接选择是。
断电并拔下JLINK连接线。重新上电即可运行下载的程序。
四、GPIO控制实验 一、实验目的
实现开发板上的LED等按照一定规律“亮、灭”,掌握STM32基本GPIO口的使用。
二、硬件原理
实现跑马灯仅需要对STM32的GPIO进行配置与读写。GPIO是STM32最常用的设备
之一,STM32可以提供多达80个双向GPIO口,它们分别分布在A~E等5个端口中。每个端口有16个引脚,每个引脚可以承受最大为5V的压降。
STM32的每个I/O端口都由7个寄存器控制,分别是: 2个32位端口配置寄存器GPIOx_CRL和GPIOx_CRH;2个32位的数据寄存器GPIOx_IDR和GPIOx_ODR;1个32位的置位/复位寄存器GPIOx_BSRR;1个16位的复位寄存器GPIOx_BRR;1个32位的锁存寄存器GPIOx_LCKR。
1) 端口配置寄存器
STM32端口由端口配置寄存器进行配置,由于每个端口有16个I/O口(即引脚),而每个I/O口需要4位配置,因此每个端口需要64位配置,这也是每个端口有2个32位端口配置寄存器的原因。如A端口配置寄存器GPIOA_CRL与GPIOA_CRH,其中GPIOA_CRL配置低8位I/O口,GPIOA_CRH配置高8位I/O口,图中是GPIO_CRL寄存器。
31 30CNF7[1:0]rw rw15 14CNF3[1:0]rw rw29 28MODE7[1:0]rw rw13 12MODE3[1:0]rw rw27 26CNF6[1:0]rw rw11 10CNF2[1:0]rw rw25 24MODE6[1:0]rw rw 9 8MODE2[1:0]rw rw23 22CNF5[1:0]rw rw 7 6CNF1[1:0]rw rw21 20MODE5[1:0]rw rw5 4MODE1[1:0]rw rw19 18CNF4[1:0]rw rw 3 2CNF0[1:0]rw rw17 16MODE4[1:0]rw rw1 0MODE0[1:0]rw rw
每个I/O口可以由软件配置成8种模式:输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽输出、推挽式复用功能、开漏复用功能,以后根据不同的功能配置不同的模式。
表3.1 STM32的I/O口位配置表
配置模式 通用输出 复用功能输出 推挽式(Push-Pull) 开漏(Open-Drain) 推挽式(Push-Pull) 开漏(Open-Drain) 模拟输入 输入 输入浮空 输入下拉 输入上拉
表3.2 STM32输出模式配置表 MODE[1:0] 含义 CNF1 CNF0 0 0 1 0 1 0 1 0 00 MODE[1:0] 01 10 11 参见表 PxODR寄存器 0或1 0或1 任意 任意 任意 任意 0 1 1 0 1 00 01 10 11
保留 最大输出速率10MHz 最大输出速率2MHz 最大输出速率50MHz 在固件库开发中,操作寄存器CRH和CRL来配置I/O口的模式和速度是通过GPIO初
始化函数完成:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
这个函数有两个参数,第一个参数用来指定GPIO,取值范围GPIOA~GPIOG。第二个
参数为初始化参数结构体指针,结构体类型为GPIO_InitTypeDef,在此可以详细了解该结构体定义,该定义在stm32f10x_gpio.h中。
typedef struct {
uint16_t GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; } GPIO_InitTypeDef; 配置GPIO的代码如下:
GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
// 配置端口中引脚5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 速度50MHz GPIO_Init(GPIOB, &GPIO_InitStrucure);
上述代码设置GPIOB的第5个端口为推挽输出模式,同时速度为50Mbit/s。 首
先
GPIOB是端口GPIOB的配置寄存器编址,该编址可以在 中查到。结构体GPIO_InitStructure的第一个成员变量GPIO_Pin实际指出了需要配置的引脚在GPIOB配置寄存器中的偏移量。成员变量GPIO_Mode用来设置引脚的输入输出模式,这是通过一个枚举类型定义:
typedef enum {
GPIO_Mode_AIN = 0x0;
GPIO_Mode_FLOATING = 0 }
2) 数据输入/输出寄存器