STM32/51单片机编程

STM32/51单片机编程

任务要求

  1. 安装并熟悉Proteus 电路仿真软件,完成一个C51程序设计和仿真

  2. 安装mdk5软件和stm32包,熟悉mdk开发环境,完成一个stm32的简单的通过寄存器方式,用某一个GPIO端口点亮LED等程序。安装过程、示例程序可以参考网上代码(注意:没有stm32开发板硬件之前,可只做程序的编译和仿真测试)

  3. (理论概念-常见嵌入式岗位面试题) 通过以上实践,结合阅读ARM、STM32技术手册,深入思考STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置的一般步骤。回答:1)嵌入式C程序代码对内存(RAM)中的各变量的修改操作,与对外部设备(寄存器—>对应相关管脚)的操作有哪些相同与差别?2)为什么51单片机的LED点灯编

  4. (理论概念-常见嵌入式岗位面试题) 与PC平台上的一般程序不同,嵌入式C程序经常会看见 register和volatile 关键字,请解释这两个变量修饰符的作用,并用C代码示例进行说明。程要比STM32的简单?

任务1
Proteus安装
具体见:Proteus使用教程并仿真51程序——LED流水灯

Proteus原理图
在这里插入图片描述
编写51程序
在这里插入图片描述
//51单片机编程常用的头文件

   #include <reg51.h>

   #include <intrins.h>

   //延迟函数

   void delay_ms(int a)

   {
          int i,j;

          for(i=0;i<a;i++)

          {
                 for(j=0;j<1000;j++) _nop_();

  

          }

   }

  

   void main(void)

   {
          while(1)

          {
                 P0=0xfe;

                 delay_ms(50);

                 P0=0xfd;

                 delay_ms(50);

                 P0=0xfb;

                 delay_ms(50);

                 P0=0xf7;

                 delay_ms(50);

                 P0=0xef;

                 delay_ms(50);

                 P0=0xdf;

                 delay_ms(50);

                 P0=0xbf;

                 delay_ms(50);

                 P0=0x7f;

                 delay_ms(50);

          }

   }

将生成的hex文件加入protues仿真中

仿真效果截图
在这里插入图片描述
在这里插入图片描述

任务2
完成一个stm32的简单的通过寄存器方式,用某一个GPIO端口点亮LED

参考内容:https://www.bilibili.com/video/BV1th411z7sn?p=4&vd_source=07ac35c902c946868feed868ebe4291d

1.安装keil,配置相关文件
在这里插入图片描述
2.初始化引脚
在这里插入图片描述
3.完成上述内容后进行下载测试,以下为实验结果

在这里插入图片描述

在这里插入图片描述
(交替闪烁)

任务3
嵌入式C程序代码对内存(RAM)中的各变量的修改操作,与对外部设备(寄存器—>对应相关管脚)的操作有哪些相同与差别?

回答:
不同之处在于:
1、内存操作主要包括对变量的读写,而外设操作则是对硬件寄存器的读写,以实现对外设的控制和配置。
2、内存操作通常是对变量进行直接访问,而外设操作需要通过特定的寄存器来访问。这些寄存器具有特定的功能和地址,用于配置和控制外设。
3、外设操作可能涉及到位操作,例如设置某个特定的位来打开或关闭外设的某个功能。

相同之处在于:
1、对内存中的变量和对外设备寄存器都需要进行读取和写入操作。
2、无论是内存还是外设,都需要使用适当的数据类型和指针来访问和修改。

为什么51单片机的LED点灯编程要比STM32的简单?
STM32系列芯片具有较为复杂的内核和丰富的外设功能。它使用了Cortex-M内核,具有更多的寄存器和功能模块。为了控制LED的点亮与熄灭,需要进行GPIO口的初始化设置、配置寄存器的读写等操作。
51单片机的架构相对较简单,指令集和寄存器都比较有限,因此编程的复杂度相对较低。在51单片机上,可以直接通过设置特定的IO口状态来控制LED的点亮与熄灭。

任务4
register 关键字用于向编译器建议将变量存储在寄存器中,以提高访问速度。然而,现代的编译器通常能够根据需要自动优化变量的存储位置,因此使用 register 关键字的效果可能会有限。实际上,C99标准已经取消了 register 关键字,而是将其作为一个提示给编译器,表明该变量可以被放置在寄存器中。

下面是一个示例,演示如何使用 register 关键字:

c

register int counter;  // 声明一个建议存储在寄存器中的整数变量

int main() {
    counter = 0;

   

    while (counter < 10) {
        // 在循环中更新计数器值

        counter++;

    }

   

    return 0;

}

volatile 关键字用于告诉编译器,某个变量的值可以在意料之外的情况下发生改变,因此编译器不应该对该变量进行优化。这在并发或多线程环境、硬件寄存器和中断处理等场景中特别有用。

下面是一个示例,演示如何使用 volatile 关键字:

c

volatile int flag;  // 一个易变的整数变量

void interrupt_handler() {
    flag = 1;  // 在中断处理程序中修改 flag 的值

}

int main() {
    flag = 0;

   

    while (flag == 0) {
        // 在循环中检查 flag 的值

    }

   

    // 执行其他操作

   

    return 0;

}

在上述示例中,volatile 关键字确保编译器不会对 flag 进行优化,以免由于中断处理程序的修改而导致出现意外的行为。

实验总结
在完成上述实验任务的过程中,我学到了很多关于嵌入式系统和STM32芯片的知识。以下是我的实验总结和经验:

Proteus电路仿真软件:

安装和熟悉Proteus软件的目的是设计和模拟C51程序。Proteus提供了一个测试和调试嵌入式系统设计的虚拟环境。

通过使用Proteus,我可以验证我的C51程序的正确性,并确保硬件的稳定性和可靠性。

MDK开发环境和STM32芯片:

安装了mdk5软件和stm32包后,我熟悉了mdk开发环境,学会了如何通过注册来编程STM32。

作为一个示例程序,我学习了如何通过点亮LED来初始化GPIO端口和控制外部设备。

虽然没有实际的STM32开发板,但是我可以编译模拟测试程序,让我对STM32编程有了一定的了解。

STM32F103系列芯片的地址映射和寄存器映射原理:

结合阅读ARM和STM32技术手册,我深入思考了STM32F103芯片的地址映射和寄存器映射原理。

GPIO端口的初始化设置一般步骤包括选择GPIO模式、配置输出类型和速度、设置引脚状态等。

register和volatile关键字的作用:

通过使用这两个关键字,我们可以更好地控制变量的存储和访问方式。
register关键字用于告诉编译器将变量存储在寄存器中,以提高访问速度。但是编译器可以忽略这个关键字。

volatile关键字用于告诉编译器不要优化这个变量,因为它的值可能会意外改变。

通过使用这两个关键字,我们可以更好地控制变量的存储和访问方式。
通过完成上述实验任务,我增加了对嵌入式系统和STM32芯片的理解。我熟悉了常见的开发环境和工具,学会了如何通过编程控制外部设备。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机械手臂是一种能够模拟人类手臂运动的机械装置,常用于工业自动化和科研领域。机械手臂的核心是控制系统,控制系统可以使用各种单片机进行编程实现。对于机械手臂的控制,可以选择使用arduino、STM3251单片机等开源硬件平台。 使用arduino进行机械手臂控制编程是一种常见的选择。arduino是一款简单易用、开源的单片机开发板,具有丰富的周边工具和库函数支持。通过arduino与机械手臂的连接,可以通过编程实现手臂的协调运动、精确定位等功能。在arduino的开发环境中,我们可以使用C/C++编写程序,通过对串口和GPIO等接口的操作来控制各个关节的运动。 与arduino相比,STM32是一款功能更强大的单片机,具有更高的计算性能和更多的外设接口。使用STM32进行机械手臂的控制编程可以实现更加复杂和精确的运动控制。STM32的开发环境是基于Keil或STM32CubeIDE等工具,我们可以使用C语言或者用C++进行编程,通过对定时器、PWM信号、CAN总线等进行操作来控制机械手臂的运动。 51单片机是一款经典的单片机,使用广泛,但相对于arduino和STM32而言,功能和性能有所限制。使用51单片机进行机械手臂的编程可以实现基本的运动控制功能,但不如arduino和STM32那样灵活和强大。 总结来说,使用arduino、STM3251单片机进行机械手臂的编程可以实现6个自由度的控制。在开源硬件平台中,arduino是入门级的选择,适合初学者进行控制编程STM32具有更好的性能和扩展性,适合需要更复杂控制的应用场景。51单片机则是功能相对受限的选择,适合一些简单的控制需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值