STM32和C51程序设计仿真

    科技2024-04-15  10

    文章目录

    (一)STM32工程的建立和程序的编译(二)C51程序的设计和仿真C51建立工程和生成.HEX文件Proteus仿真 (三)总结

    (一)STM32工程的建立和程序的编译

    1、首先新建工程文件夹 2、在新建的工程文件夹中再新建如下文件夹 3、在你下载MDK5的文件夹中去找到如下文件,分别复制粘贴到各个文件夹中 (1)CMSIS中存放的文件 (2)startup中存放的文件 (3)Doc中存放的文件 (4)Libraries中存放的文件

    (5)Project用来存放自己建立的Keil5工程文件 (6)User中存放的文件(main.c是自己新建的文本文件) (7)打开Keil5,点击Project,新建工程,工程目录选择Project 接着会出现一个弹框,直接关掉就行。 (8)完成以上步骤后,将需要的固件库相关文件复制到了工程目录下面。点击如下图标 新建分组 建立好后双击文件夹,将文件添加进去 (10)在Define中添加宏定义USE_STDPERIPH_DRIVER 按照步骤依次点击 工程文件创立的操作完成 (11)在main.c中输入代码(此代码为点亮LED灯的代码)

    #define RCC_APB2ENR *(volatile unsigned long *)0x40021018 #define GPIOB_CRL *(volatile unsigned long *)0x40010C00 #define GPIOB_ODR *(volatile unsigned long *)0x40010C0C int main(void) { // 开启端口 B 的时钟 *(unsigned int *)0x40021018 |= (1 << 3); // 配置 PB0 为通用推挽输出模式,速率为 2M *(unsigned int *)0x40010C00 |= (1 << (4*0)); // 配置 PB0 为通用推挽输出模式,速率为 2M *(unsigned int *)0x40010C0C &= ~(1 << 0); } void SystemInit(void) {}

    定义一个 SystemInit 空函数的目的是为了骗过编译器,不然将会报错 (12)编译代码 编译通过

    (二)C51程序的设计和仿真

    C51建立工程和生成.HEX文件

    1、新建一个C51工程,可参考此: 链接. 2、建好工程后,进行如下操作: 3、新建一个 main.c 文件: 此程序的功能为:使数码管循环显示“0”-“F”

    #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff }; void DelayMS(uint x) { uchar t; while(x--) for(t=120;t>0;t--); } void main() { uchar i=0; P0=0x00; while(1) { P0=~DSY_CODE[i]; i=(i+1)%16;/*显示0-f*/ DelayMS(400); } }

    Proteus仿真

    1、打开Proteus,新建一个工程并画出电路图: Proteus使用方法可参考此链接 2、双击 AT89C51芯片,链接 Keil C51 生成的 .hex 文件: 3、点击运行仿真,效果如下:

    (三)总结

    对于我来说也是刚开始接触STM32,所以也比较陌生,有许多不太懂的,做的不够完善的地方,希望大家多多包涵,多多指教。

    Processed: 0.013, SQL: 9