实验1 F103基准实验
1.1实验内容:验证以下基本功能:两个LED(编号为LED1和LED2)每500ms交替闪烁;计算机上的串口助手每秒输出一次字符串。
(实验背景)启动车辆时,首先将变速箱从驻车挡切换到前进挡,然后松开刹车紧接着踩油门,需要加速时,将油门踩得深一些,需要减速时,油门适当松开一些。需要停车时,先松开油门,然后踩刹车,在车停稳之后将变速箱从前进挡切换到驻车挡。当然,实际开汽车还需要考虑更多的因素,本例仅为了形象地解释寄存器和固件库开发模式而将其简化了。
1.2实验原理:
1)寄存器
寄存器:CAR_GEAR(变速箱控制寄存器)
GEAR[2:0]部分位解释说明: 000-PARK(驻车挡) 001-REVERSE(倒车挡) 010-NEUTRAL(空挡) 011-DRIVE(前进挡) 100-LOW(低速挡)
寄存器:CAR_SPEED(油门控制寄存器)
SPEED[7:0]解释说明: 0表示未踩油门,255表示将油门踩到底
寄存器:CAR_BRAKE(刹车控制寄存器)
BRAKE[7:0]解释说明: BRAKE[7:0]:刹车选择 0表示未踩刹车,255表示将刹车踩到底
寄存器:CAR_WHEEL(转向盘控制寄存器)
WHEEL[7:0]部分位解释说明: 0表示方向盘向左转到底,255表示方向盘向右转到底
2)固件开发模式
设计汽车控制单元的4个固件函数:
变速箱控制函数SetCarGear、油门控制函数SetCarSpeed、刹车控制函数SetCarBrake、转向盘控制函数SetCsrWheel
int SetCarGear(Car_TypeDef*CAR,itn gear);
int SetCarSpeed(Car_TypeDef*CAR,itn speed);
int SetCarBrake(Car_TypeDef*CAR,itn brake);
int SetCarWheel(Car_TypeDef*CAR,itn wheel);
由于以上四个函数的代码实现类似,以SetCarGear为例
//Car_TypeDef定义如下:
typedef struct
{
__IO uint32_t GEAR;
__IO uint32_t SPEED;
__IO uint32_t BRAKE;
__IO uint32_t WHEEL;
}Car_TypeDef;
//CarGear_TypeDef定义如下:
typedef enum //枚举
{
Car_Gear_Park = 0;
Car_Gear_Reverse,
Car_Gear_Neutral
Car_Gear_Drive
Car_Gear_Low
}CarGear_TypeDef;
//·根据Car_TypeDef中指定的参数设置挡位
int SetCarGear(Car_TypeDef* CAR, int gear)//CAR 指向CAR寄存器组的首地址; gear 具体的挡位
{
int valid = FALSE;
if(0 <= gear && 4 >= gear)//判断是否为有效挡位
{
CAR->GEAR = gear;
valid = TRUE;
}
return valid;
}
1.3 Keil编辑和编译以及STM32下载过程
1.4 实验步骤
步骤1:Keil软件标准化设置->步骤2:新建存放工程的文件夹->步骤3:复制和新建文件夹 ->步骤4:新建一个工程 ->步骤5:选择对应的STM32型号-> 步骤6:关闭Manage Run-Time Environment->步骤7:删除原有分组并新建分组 ->步骤8:向分组添加文件 ->步骤9:勾选UseMicroLIB ->步骤10:勾选Create HEX File-> 步骤11:添加宏定义和头文件路径->步骤12:程序编译->步骤13:通过ST-Link下载程序 ->步骤14:安装CH340驱动 ->步骤15:通过mcuisp下载程序-> 步骤16:通过串口助手查看接收数据-> 步骤17:查看STM32核心板工作状态