嵌入式系统开发 第三周作业
1. 安装mdk5软件和stm32包
安装mdk5
1 按照pdf安装mdk
2 离线模式安装pack
其中一个pack,报错翻译为不支持包架构版本“1.4.0”。最大支持的版本是’1.2。请更新到的更新版本,所以如有需要此pack的请自行升级MDK的版本,但对于初学者stm32 pack1.0.4已经足够。3 mdk5的破解
必须以管理员的身份进入keil否则会添加license错误
进入license management页面复制cid
打开keil generic keygen ,之前版本破解日期为2020,改为2032
破解完成
详细安装请参照
2. LED闪烁
https:///2414466154/seven 下载工程文件
新建工程
跟工程文件同一目录
关闭该界面,不用keil所带的
将文件工程名改成stm_led.STM32F103CB.
添加文件
我这里有点小问题不能添加文件夹
然后再C/C++中define中填入USE_STDPERIPH_DRIVER, STM32F10X_MD
添加include path。
点击output,勾选生成hex
#include "led.h"
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
写点灯代码
在新建一个led.h代码如下
#ifndef __LED_H
#define __LED_H
#include "stm32f10x_gpio.h"
#define ON 0
#define OFF 1
#define LedControl(a) if(a) GPIO_SetBits(GPIOB,GPIO_Pin_5); else GPIO_ResetBits(GPIOB,GPIO_Pin_5)
void LED_GPIO_Config(void);
#endif
main函数代码如下图所示
#include "stm32f10x.h"
#include "led.h"
void Delay(u32 count)
{
u32 i=0;
for(;i<count;i++);
}
int main(void)
{
LED_GPIO_Config();
while(1)
{
//GPIO_ResetBits(GPIOB, GPIO_Pin_5);
LedControl(ON);
Delay(1000000);
//GPIO_SetBits(GPIOB, GPIO_Pin_5);
LedControl(OFF);
Delay(1000000);
}
}
结果如下
proteus仿真
双击 STM32F103R6 芯片,链接 MDK 生成的 .hex 文件:
仿真结果如下
3.C51程序设计和仿真
先前已安装,跳过安装步骤
这个根据开发板使用的 CPU 具体的型号来选择,像是普中 51-双核-A6、普中 51-双核-A7、普中 51-双核-A8、HC6800-EM3 V2.2、HC6800-EM3 V2.2C、HC6800-EM3 V3.0 开发板采用的是 STC89C516 芯片,开拓者、HC6800-ES V2.0、普中 51-单核-A2 使用的是 STC89C52 芯片。但实际上在 KEIL C51 软件内找不到这些芯片类型,但我们可以选择 AT89C51 或者 AT89C52,它们都是 51 内核,软件代码兼容。这里选择 AT89C52,具体操作如下。
点击否
然后编写main.c,如上,生成.hex文件。(keil5无法上述操作,仍旧按照keil4)
#include "reg51.h"
void main(void)
{
P0 = 0x0; //点亮P0端口上的LED灯
}
仿真结果如下
总结
keyen.exe记得关声音
添加工程时记得添加启动文件
添加路径一定要正确不然会无法找到目录
参考资料