首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

史上最全的LED点灯程序,你都掌握了吗?

摘要:你点亮过多少板子的LED灯呢?有很多小伙伴留言说讲一下STM32、FPGA、Liunx他们之间有什么不同。不同点很多,口说无凭,今天就来点亮一下STM32、FPGA和Liunx板子的LED灯,大家大致看一下点灯流程点灯环境以及点灯流程,就能大概的了解一下三者的区别,可以有选择的去学习!

一、使用STM32点亮LED灯

STM32从字面上来理解ST是意法半导体,M是Microelectronics的缩写,32 表示32位,合起来理解,STM32就是指ST公司开发的32位微控制器。在如今的32 位控制器当中,STM32可以说是最璀璨的新星,它受宠若娇,大受工程师和市场的青睐,无芯能出其右。首先使用STM32电亮一个led灯,大家现在回过头来看是不是非常的简单。

STM32初始化流程

1、使能指定GPIO的时钟。

2、初始化GPIO,比如输出功能、上拉、速度等等。

3、STM32有的IO可以作为其它外设引脚,也就是IO复用,如果要将IO作为其它外设引脚使用的话就需要设置 IO 的复用功能。

4、最后设置GPIO输出高电平或者低电平。

1、新建工程

2、代码编写

3、编译代码

4、配置下载器

烧录代码

二、使用FPGA点亮LED灯

FPGA(Field Programmable Gate Array,简称 FPGA),译文:现场可编程门阵列,一种主要以数字电路为主的集成芯片,于1985年由Xilinx创始人之一 Ross Freeman发明,属于可编程逻辑器件PLD(Programmable Logic Device)的一种。真正意义上的第一颗FPGA芯片XC2064为Xilinx所发明,这个时间差不多比著名的摩尔定律晚20年左右,但是FPGA一经发明,后续的发展速度之快,超出大多数人的想象。

计数器是在FPGA设计中最常用的一种时序逻辑电路,根据计数器的计数值我们可以精确的计算出FPGA内部各种信号之间的时间关系,每个信号何时拉高、何时拉低、拉高多久、拉低多久都可以由计数器实现精确的控制。而让计数器计数的是由外部晶振产生的时钟,所以可以比较精准的控制具体需要计数的时间。计数器一般都是从0开始计数,计数到我们需要的值或者计数满溢出后清零,并可以进行不断的循环。

本例我们让计数器计数1s时间间隔,来实现led灯每隔1s闪烁一次的效果。

1、模块框图

2、RTL代码的编写

开始RTL代码的编写,RTL代码编写出的模块叫RTL模块(后文中也称功能模块、可综合模块)。之所以叫RTL代码是因为用Verilog HDL在Resistances Transistors Logic(寄存器传输级逻辑)来描述硬件电路,RTL代码能够综合出真实的电路以实现我们设计的功能,区别于不可综合的仿真代码。

3、代码的分析和综合

4、 查看RTL视图

5、Testbench代码的编写

6、ModelSim仿真波形

7、上板验证

程序下载完毕后,会看到板卡LED0不断闪烁,时间间隔为1秒。

三、使用I.MX6ULL IO点亮LED

嵌入式linux学习者大体可以分为两类,一类是进阶用户,主要指已经有大量mcu工作经验的开发者, 他们希望进阶到更有难度,薪资更高的mpu开发中去。另一类则是学生用户,主要是刚开始接触嵌入式开发的大学生群体。

I.MX应用处理器包括I.MX8、I.MX7、I.MX6及I.MX28系列,被广泛应用于工业控制、汽车电子领域,久经市场考验。而且它的产品线非常丰富,用户熟悉其中一款产品后就能非常方便地迁移至不同的平台。

一般拿到一款全新的芯片,第一个要做的事情的就是驱动其GPIO,控制其GPIO输出高低电平,我们学习I.MX6U也一样的,先来学习一下I.MX6U的GPIO。在学习I.MX6U的GPIO之前,我们可以对比一下STM32的GPIO初始化(如果没有学过 STM32 就不用回顾了),我们以最常见的STM32F103为例来看一下STM32的GPIO初始化,示例代码如下:

STM32初始化流程

1、使能指定GPIO的时钟。

2、初始化 GPIO,比如输出功能、上拉、速度等等。

3、STM32 有的 IO 可以作为其它外设引脚,也就是 IO 复用,如果要将 IO 作为其它外设引脚使用的话就需要设置 IO 的复用功能。

4、最后设置GPIO输出高电平或者低电平。

I.MX6U的GPIO一共有5组:,其中GPIO1有32个IO,GPIO2有22个IO,GPIO3有29个IO、GPIO4有29个IO,GPIO5最少,只有12个IO,这样一共有。

I.MX6ULL IO初始化流程

1、使能时钟,这7个寄存器控制着6ULL所有外设时钟的使能。为了简单,设置个寄存器全部为,相当于使能所有外设时钟。

2、IO复用,将寄存器的设置为,这样就复用为。

3、寄存器是设置的电气属性。包括压摆率、速度、驱动能力、开漏、上下拉等。

4、配置能,设置输入输出。设置寄存器bit3为1,也就是设置为输出模式。设置寄存器的,为1表示输出高电平,为0表示输出低电平。

汇编由一条一条指令构成,指令就涉及到汇编指令。

假设a地址为0X20,b地址为0x30

我们在使用汇编编写驱动的时候最常用的就是和这两个指令。

1、新建工程

新建工程文件夹

新建裸机驱动文件夹

新建LED灯文件夹2、在VSCode中编写代码

ubuntu中我们使用的是VScode编辑器来写代码,跟在windows中新建项目一样,新建项目、保存工作区,然后编写代码。

3、编写代码

4、编译代码

使用如下三条命令来编译代码

编译、链接、格式转换

最终生成了 三个文件

5、烧写代码

STM32中代码烧写到内部FLASH。IMX6ULL支持SD卡、EMMC、NAND、nor、SPI flash等启动。裸机例程选择烧写到SD卡里面。在ubuntu下向SD卡烧写裸机bin文件。烧写不是将bin文件拷贝到SD卡中,而是将bin文件烧写到SD卡绝对地址上。而且对于I.MX而言,不能直接烧写bin文件,比如先在bin文件前面添加头部。完成这个工作,需要使用正点原子提供的imxdownload软件。

利用FileZilla Client软件将imxdownload软件发送到工程目录下

烧写的三个命令

Imxdownload使用方法,确定要烧写的SD卡文件,需要使用命令来检测SD是哪一个文件,我的是。

插拔SD卡可以看到两个的区别

给予imxdownload可执行权限:

烧写:

向SD卡烧写完成

会向添加一个头部,生成新的文件,这个文件就是最终烧写到SD卡里面去的。

这里要注意的是如果烧写的速度在几十MB/S左右的话,那么可能意味着烧写失败了。而且是因为SD卡没找到而导致烧写失败,这个问题只能重启 ubuntu解决。

之后就可以从读卡器中把SD拔下来,然后插入到开发板中,将拨码开关拔止SD卡模式,供电之后,蓝色LED亮,红色LED灭,两秒钟之后红色LED亮。

最后你觉得哪个板子点灯最简单呢?

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230331A039YA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券