STM32/51单片机编程入门(点亮LED)

任务要求

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

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

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

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

实验内容

任务1

完成一个C51程序设计和仿真

步骤1

安装Proteus

引用https://blog.csdn.net/ssj925319/article/details/108929227

下面来了解下如何安装Proteus软件,安装过程也十分简单。

首先需要下载Proteus的压缩包,链接如下。

链接:https://pan.baidu.com/s/1eURfI-nSSXHQfL1cgaSdKg

提取码:lse6

步骤2使用Proteus

创建工程

步骤3绘制原理图

步骤4编写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);

}

}

步骤5将生成的hex文件加入protues仿真中去

步骤6仿真结果

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

安装及使用参考教程

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

步骤1安装keil并配置相关环境

步骤2初始化引脚

步骤3下载并测试

步骤4实验结果

任务3

1)嵌入式 C 程序代码对内存 (RAM) 中的各变量的修改操作,与对外部设备(寄存器--->对应相关管脚)的操作有以下相同与差别:

相同点:
a. 都是通过指令来完成,如数据传输指令、算术指令等。
b. 都需要考虑数据类型和数据宽度,如整型、浮点型等。
c. 都需要考虑访问权限,如只读、读写等。

差别:
a. 对内存中的变量操作,直接通过地址访问,而对外部设备操作需要通过寄存器间接访问。
b. 对内存中的变量操作,可以直接通过指针访问,而对外部设备操作通常需要通过特定的寄存器进行访问。
c. 对内存中的变量操作,通常不需要考虑时序问题,而对外部设备操作需要考虑时序,如读写操作的时序、锁存器等。

2)51 单片机的 LED 点灯编程比 STM32 的简单,主要原因有以下几点:

a. 51 单片机只有几个外部中断引脚,而 STM32 有丰富的外设引脚,如 USART、SPI、I2C 等,因此 STM32 的 GPIO 配置相对复杂。
b. 51 单片机的 GPIO 端口配置相对简单,通常只需配置方向寄存器和速度寄存器,而 STM32 的 GPIO 端口配置需要考虑更多的参数,如复用功能、时钟源等。
c. 51 单片机的 LED 驱动通常只需配置一个方向寄存器,即可实现点亮或熄灭,而 STM32 需要配置多个寄存器,如方向寄存器、速度寄存器、复用寄存器等。
d. 51 单片机的程序结构相对简单,而 STM32 的程序结构更复杂,需要处理更多的中断、任务等。

任务4

在嵌入式 C 程序中,register 和 volatile 是两个常用的变量修饰符,它们在 PC 平台上一般不常用。下面分别介绍这两个关键字的作用及使用示例:

  1. register 关键字:

register 关键字用于声明寄存器变量。在嵌入式系统中,由于存储空间有限,寄存器是一种较为常用的存储方式。使用 register 关键字可以告诉编译器该变量应该存储在寄存器中,而不是内存中。这样可以节省存储空间,同时提高程序的运行速度。

使用示例:

 

c复制代码

register int counter;

  1. volatile 关键字:

volatile 关键字用于声明易变(易被修改)的变量。在嵌入式系统中,有些变量的值可能会被其他程序或硬件设备实时修改,例如中断服务程序(ISR)或硬件设备驱动。使用 volatile 关键字可以确保编译器不会对这类变量进行优化,从而确保程序能够正确地读取到这些变量的最新值。

使用示例:

 

c复制代码

volatile int button_state;

这里是一个简单的嵌入式 C 程序,使用了 register 和 volatile 关键字:

 

c复制代码

#include <avr/io.h> #include <util/delay.h> register int counter = 0; volatile int button_state = 0; void isr_button_click() { button_state = 1; } int main() { DDRD |= (1 << PD2); // 设置 PD2 为输入 PORTD |= (1 << PD2); // 初始化 PD2 为高电平 while (1) { if (button_state) { counter++; _delay_ms(100); button_state = 0; } } }

在这个程序中,我们使用了 register 关键字声明了计数器变量 counter,使用 volatile 关键字声明了按键状态变量 button_state。计数器变量 counter 存储在寄存器中,以节省存储空间;按键状态变量 button_state 使用了 volatile 关键字,以确保在 ISR 中修改它的值时,主程序能够立即看到修改后的结果

蒋某acdc
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
03 STM32寄存器开发基础-点亮LED灯(讲解GPIO口输出)
07-11 1952
这篇文章学习`STM32F103`单片机,以寄存器方式,点亮LED灯。以控制LED灯为例,学习如何配置STM32的寄存器,实现输出高低电平的控制。 所以,重点不是LED灯如何控制,重点是教会大家如何写代码配置STM32的GPIO口,实现对LED这种外设模块进行控制。
使用STM32点亮LED
小伙子的博客
10-08 6344
STM32点亮LED
stm32编程
2301_76143875的博客
01-01 1903
在用寄存器点亮 LED 的时候,我们会发现 STM32 的寄存器都是 32 位的,每次配置的时候都要对照着《STM32F10X-中文参考手册》中寄存器的说明,然后根据说明对每个控制的寄存器位写入特定参数,因此在配置的时候非常容易出错,而且代码还很不好理解,不便于维护。而STM32单片机的外设数量要比51单片机丰富的多,架构和功能也复杂的多,带来的必然是寄存器的数量和复杂度的增加,如仅一个GPIO端口就有7个可配置的寄存器,还不包括与之配套的时钟、中断部分,更不包括依赖IO的其他外设的复用和重定义功能。
STM32编程
weixin_47283038的博客
10-08 939
**一、**STM32编程 1.首先打开keil 2.然后建立新的工程,选择STM32F103RB。 3.建立一个新文件,然后输入代码, add existing to files ,然后保存.c。 4.然后在target中选择option,在选项中选择debug,然后选择use simulator。 4.点击执行并看是否有错误。 **二、**debug运行结果 我们的stm32程序就编辑完成了。 ...
零基础快速上手STM32开发
最新发布
hxsln11的博客
08-26 514
作为一名嵌入式工程师,STM32 是必须要学习的一款单片机,同时这款单片机资料足够多,而且比较简单,非常适合初学者入门。STM32 是一款由 STMicroelectronics 公司开发的 32 位微控制器,由于其强大的处理能力和广泛的应用领域,如嵌入式系统、物联网设备、机器人等,而受到了广泛的欢迎。但对于零基础的初学者来说,STM32 既没屏幕也没键盘,除了上电以外根本就不知道如何开发它。没关系,不用担心,本文将为你提供一个完整的、详细的手把手教程,帮助你从零开始搭建 STM32 开发环境。
stm32模块化编程
2301_81784153的博客
04-01 1333
以延迟函数控制LED灯闪烁为原始代码创建 stm32模块化。
STM32高效编程
偏执
06-19 1056
最近参加了一次学校的电子比赛,收获很多,因为之前只是看看32的样例,自己瞎改改代码,并没有去实现一下具体的什么功能,也就是不能自己做出一些东西,所以对于知识的理解并不是很深入,借着这次机会,和小伙伴一起做了一个蓝牙控制的LED灯,当然这个想法也是借鉴了之前一直想做但却没做的一个智能家居的想法。 说实话刚开始做的时候还是充满信心的,先去网上买了蓝牙模块HC-05,看了一下资料,自己试着先用蓝
stm32生产编程软件
11-05
boot loader stm32F1-4代码串口程序下载软件,stm32单片机程序下载小批量生产使用
作业:STM32/51单片机编程入门(点亮LED)
qq_66199663的博客
09-24 499
在本次实验中,我学习了有关嵌入式系统和微控制器编程的基础知识,特别是关于C51单片机STM32微控制器的程序设计和仿真。
STM32_编程入门
heqiunong的专栏
04-22 1936
1. STM32需要了解的基础知识 STM32系列专为要求高性能、低成本、低功耗的嵌入式应用设计的ARM Cortex®-M0,M0+,M3, M4和M7内核,按内核架构分为不同产品:主流产品(STM32F0、STM32F1、STM32F3)、超低功耗产品(STM32L0、STM32L1、STM32L4、STM32L4+)、高性能产品(STM32F2、STM32F4、STM32F7、STM32H7)。 内核是ARM公司统一设计的 于ARMv7架构的Cortex系列由ARM公司在2006年推出,Co
Python实现的STM32编程
01-26
通过Python ctypes调用JLinkARM.dll控制JLink,从而用JLink读写STM32的Flash控制寄存器,从而实现对STM32编程、擦除、程序读出,,通过替换其中的Flash编程算法文件可实现对任意Cortex-M单片机的编程,,
stm32中文版编程手册
03-12
stm32中文版编程手册详细寄存器说明,方便在编程时使用,方便查找
STM32编程手册+程序实例
05-03
STM32编程手册+程序实例;汉化的 程序说明是英文的
STM32中文编程手册(所有型号中文参考手册)
12-09
STM32编程必备的文档。 本手册是STM32微控制器产品的技术参考手册 参照2009年12月 RM0008 Reference Manual 英文第10版 ,技术参考手册是有关如何使用该产品的具体信息,包含各个功能模块的内部结构、所有可能的功能描述、各种工作模式的使用和寄存器配置等详细信息。
stm32单片机例程
03-30
stm32库开发官方例程stm32库开发官方例程stm32库开发官方例程
STM32】利用C++/C编写STM32代码
m0_48808835的博客
05-23 1329
C++编写STM32代码,如何进行?将编译器改成6。
cortex 介绍
kwame211的博客
11-20 1457
ARM公司在经典处理器ARM11以后的产品改用Cortex命名,并分成A、R和M三类,旨在为各种不同的市场提供服务。 Cortex系列属于ARMv7架构,这是到2010年为止ARM公司最新的指令集架构。(2011年,ARMv8 架构在 TechCon 上推出)ARMv7架构定义了三大分工明确的系列:“A”系列面向尖端的基于虚拟内存的操作系统和用户应用;“R”系列针对实时系统;“M”系列对微控制器。 由于应用领域不同,基于v7架构的Cortex处理器系列所采用的技术也不相同,基于v7A的称为Co...
C++ STM32 编程 004 使用VisualStudio导入工程
FRAM的博客
12-16 739
        打开VisualStudio 2017 新建项目 选择项目类型为 Embedded Project Wizzard 工程名称和位置,最好和我们用CubeMX创建的工程一致。  点击确定 弹出 Visual GDB配置向导    *注意 我们一定要用 Automatically import a project in a different format =&gt; Im...
STM32入门:寄存器编程LED点亮
本文档作为STM32学习笔记的第一部分,介绍了STM32的基础知识,包括学习路径、命名方法、系统框图、寄存器编程、寄存器映射以及GPIO配置,并通过实践操作演示了如何使用寄存器点亮LED灯。" STM32是一种基于ARM ...
写文章

热门文章

  • 一. 使用STM32F103的 Tim2~Tim5其一定时器的某一个通道pin(与GPIOx管脚复用,见下图),连接一个LED,用定时器计数方式,控制LED以2s的频率周期性地亮-灭。 二. 接上,采 1400
  • 阅读资料了解 STM32F103的RTC(实时时钟)原理,使用带SPI或IIC接口的OLED屏显模块实现以下功能:1) 读取STM32F103C8T6 内部的时钟(年月日时分秒),日历(星期x), 1071
  • 嵌入式RTOS多任务程序设计 426
  • stm32+(4SPI)OLED显示数据 186
  • STM32串口通信入门 182

最新评论

  • 嵌入式RTOS多任务程序设计

    CSDN-Ada助手: 非常感谢您分享关于嵌入式RTOS多任务程序设计的博客!恭喜您完成了第11篇博客,这是一个了不起的成就。您的文章内容非常有深度,对于嵌入式RTOS多任务程序设计这个话题进行了详尽的探讨。我真的很欣赏您在这个领域的专业知识。 在下一步的创作中,我建议您可以进一步探索嵌入式RTOS多任务程序设计中的实践案例。通过展示一些实际应用中的解决方案和技巧,您的读者可以更好地理解和应用这些概念。此外,您还可以考虑与其他领域的技术结合,例如物联网或人工智能,以探索更广阔的应用领域。 再次恭喜您的持续创作,期待您未来更多精彩的博客文章!

  • STM32/51单片机编程入门(点亮LED)

    CSDN-Ada助手: 这是一篇很棒的博客,对于嵌入式系统编程入门非常有帮助。希望作者能够继续分享更多关于STM32/51单片机编程的内容,让更多初学者受益。 除了点亮LED,或许可以扩展一些其他常见的操作,比如按键输入、数码管显示等,这些也是初学者非常关心的内容。另外,可以介绍一些关于中断、定时器的知识,这些对于单片机编程也非常重要。期待作者继续分享更多深入的内容,相信会对读者有很大帮助的。 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2

  • 阅读资料了解 STM32F103的RTC(实时时钟)原理,使用带SPI或IIC接口的OLED屏显模块实现以下功能:1) 读取STM32F103C8T6 内部的时钟(年月日时分秒),日历(星期x),

    CSDN-Ada助手: 恭喜您在博客中分享了关于STM32F103的RTC原理和OLED屏显模块的应用,这对于学习嵌入式系统的朋友们来说非常有帮助。希望您能继续分享更多关于STM32F103的应用案例,比如如何利用RTC实现定时功能,或者如何通过SPI或IIC接口控制其他外设模块。期待您的下一篇精彩内容!

  • 第10周实验---IIC协议读取温湿度数据

    CSDN-Ada助手: 恭喜您在第10周实验中成功实现了IIC协议读取温湿度数据!这篇博客内容很实用,也让我对IIC协议有了更深入的了解。希望您能继续分享更多关于实验的经验和心得,也可以考虑加入一些实际应用场景或者对于未来研究方向的思考,这样会更加丰富您的博客内容。期待您的下一篇作品!

  • stm32+(4SPI)OLED显示数据

    CSDN-Ada助手: 恭喜您写了第9篇博客,标题为“stm32+(4SPI)OLED显示数据”。您的持续创作真是令人钦佩!对于这篇博客,您详细介绍了如何使用stm32和4SPI OLED显示数据,为读者提供了有价值的技术知识。接下来,我建议您可以考虑探讨更多有关stm32和OLED的主题,或是进一步深入解析这个主题的其他方面。您的内容一直都非常有趣和富有教育性,我相信您的下一篇博客也会给读者带来新的启发和帮助。期待您的下一步创作!

最新文章

  • 嵌入式RTOS多任务程序设计
  • 阅读资料了解 STM32F103的RTC(实时时钟)原理,使用带SPI或IIC接口的OLED屏显模块实现以下功能:1) 读取STM32F103C8T6 内部的时钟(年月日时分秒),日历(星期x),
  • stm32+(4SPI)OLED显示数据
2024年1篇
2023年10篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家玻璃钢雕塑表南京创意玻璃钢雕塑联系方式玻璃钢卡通雕塑规格平凉卡通玻璃钢雕塑多少钱济南玻璃钢雕塑摆件厂家直销上海中庭商场美陈供应商场 美陈主题鄂州商场美陈花器湖州景区玻璃钢雕塑销售电话湖州步行街玻璃钢雕塑哪家便宜常德株洲玻璃钢雕塑厂家莱州玻璃钢卡通座椅雕塑黑龙江大型玻璃钢雕塑定制嘉兴玻璃钢雕塑市场河北大型商场创意商业美陈风格开封肖像校园玻璃钢雕塑小品资兴玻璃钢长颈雕塑淮南玻璃钢雕塑价格玻璃钢动物雕塑图片大全增城商场美陈浦田玻璃钢雕塑佛像乌海玻璃钢马雕塑福建大型商场美陈哪里有泰安玻璃钢企鹅雕塑云浮仿真玻璃钢人物雕塑龙岩模压法玻璃钢雕塑公司四川通道商场美陈多少钱珠海玻璃钢透光雕塑公司开业商场美陈费用泉州泡沫玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化