色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

點亮STM32、FPGA和Liunx板子的LED燈

凡億PCB ? 來源:果果小師弟 ? 作者:果果小師弟 ? 2022-04-18 11:16 ? 次閱讀
摘要:你點亮過多少板子的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、新建工程

038eae20-bebb-11ec-9e50-dac502259ad0.png

2、代碼編寫

//LEDIO初始化
voidLED_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);//使能GPIOF時鐘
//GPIOF9,F10初始化設置
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;//LED0和LED1對應IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//普通輸出模式
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽輸出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOF,&GPIO_InitStructure);//初始化GPIO
GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);//GPIOF9,F10設置高,燈滅
}

3、編譯代碼

03a12636-bebb-11ec-9e50-dac502259ad0.png

4、配置下載

03b8c00c-bebb-11ec-9e50-dac502259ad0.png

燒錄代碼

03d31f6a-bebb-11ec-9e50-dac502259ad0.png

二、使用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閃爍一次的效果。

0405e26a-bebb-11ec-9e50-dac502259ad0.pngLED燈硬件原理圖
0414aaf2-bebb-11ec-9e50-dac502259ad0.png流水燈實驗管腳分配

1、模塊框圖

04210f40-bebb-11ec-9e50-dac502259ad0.png模塊框圖
0436d276-bebb-11ec-9e50-dac502259ad0.png輸入輸出信號描述

2、RTL代碼的編寫

開始RTL代碼的編寫,RTL代碼編寫出的模塊叫RTL模塊(后文中也稱功能模塊、可綜合模塊)。之所以叫RTL代碼是因為用Verilog HDL在Resistances Transistors Logic(寄存器傳輸級邏輯)來描述硬件電路,RTL代碼能夠綜合出真實的電路以實現我們設計的功能,區別于不可綜合的仿真代碼。

`timescale1ns/1ns
//帶標志信號的計數器
modulecounter
#(
parameterCNT_MAX=25'd24_999_999
)
(
inputwiresys_clk,//系統時鐘50Mhz
inputwiresys_rst_n,//全局復位
outputregled_out//輸出控制led燈
);

reg[24:0]cnt;//經計算得需要25位寬的寄存器才夠500ms
regcnt_flag;

//cnt:計數器計數,當計數到CNT_MAX的值時清零
always@(posedgesys_clkornegedgesys_rst_n)
if(sys_rst_n==1'b0)
cnt<=?25'b0;
elseif(cnt1'b1;
else
cnt<=?25'b0;
//cnt_flag:計數到最大值產生的標志信號
always@(posedgesys_clkornegedgesys_rst_n)
if(sys_rst_n==1'b0)
cnt_flag<=?1'b0;
elseif(cnt==CNT_MAX-1'b1)
cnt_flag<=?1'b1;
else
cnt_flag<=?1'b0;
//led_out:輸出控制一個LED燈,每當計數滿標志信號有效時取反
always@(posedgesys_clkornegedgesys_rst_n)
if(sys_rst_n==1'b0)
led_out<=?1'b0;
elseif(cnt_flag==1'b1)
led_out<=?~led_out;
endmodule

3、代碼的分析和綜合

0450adea-bebb-11ec-9e50-dac502259ad0.png

4、 查看RTL視圖

04638d48-bebb-11ec-9e50-dac502259ad0.png

5、Testbench代碼的編寫

`timescale1ns/1ns
moduletb_counter();


//wiredefine
wireled_out;

//regdefine
regsys_clk;
regsys_rst_n;

//初始化系統時鐘、全局復位
initialbegin
sys_clk=1'b1;
sys_rst_n<=?1'b0;
#20
sys_rst_n<=?1'b1;
end

//sys_clk:模擬系統時鐘,每10ns電平翻轉一次,周期為20ns,頻率為50Mhz
always#10sys_clk=~sys_clk;

initialbegin
$timeformat(-9,0,"ns",6);
$monitor("@time%t:led_out=%b",$time,led_out);
end

//-------------counter_inst--------------
counter
#(
.CNT_MAX(25'd24)
)
counter_inst
(
.sys_clk(sys_clk),//inputsys_clk
.sys_rst_n(sys_rst_n),//inputsys_rst_n

.led_out(led_out)//outputled_out
);
endmodule

6、ModelSim仿真波形

047468a2-bebb-11ec-9e50-dac502259ad0.png0483533a-bebb-11ec-9e50-dac502259ad0.png

7、上板驗證

049657c8-bebb-11ec-9e50-dac502259ad0.png04acabb8-bebb-11ec-9e50-dac502259ad0.png

程序下載完畢后,會看到板卡LED0不斷閃爍,時間間隔為1秒。

04c3bec0-bebb-11ec-9e50-dac502259ad0.png

三、使用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初始化,示例代碼如下:

voidLED_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PB端口時鐘
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//PB5端口配置
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//IO口速度
GPIO_Init(GPIOB,&GPIO_InitStructure);//根據設定參數初始化GPIOB.5
GPIO_SetBits(GPIOB,GPIO_Pin_5);//PB.5輸出高
}

STM32初始化流程:

1、使能指定GPIO的時鐘。

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

3、STM32 有的 IO 可以作為其它外設引腳,也就是 IO 復用,如果要將 IO 作為其它外設引腳使用的話就需要設置 IO 的復用功能。

4、最后設置GPIO輸出高電平或者低電平。

I.MX6U的GPIO一共有5組:GPIO1、GPIO2、GPIO3、GPIO4和GPIO5,其中GPIO1有32個IO,GPIO2有22個IO,GPIO3有29個IO、GPIO4有29個IO,GPIO5最少,只有12個IO,這樣一共有124個GPIO

I.MX6ULL IO初始化流程:

1、使能時鐘,CCGR0—CCGR6這7個寄存器控制著6ULL所有外設時鐘的使能。為了簡單,設置CCGR0~CCGR6這7個寄存器全部為0XFFFFFFFF,相當于使能所有外設時鐘。

2、IO復用,將寄存器IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03bit3~0設置為0101=5,這樣GPIO1_IO03就復用為GPIO

3、寄存器IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03是設置GPIO1_IO03電氣屬性。包括壓擺率、速度、驅動能力、開漏、上下拉等。

4、配置GPIO功能,設置輸入輸出。設置GPIO1_DR寄存器bit3為1,也就是設置為輸出模式。設置GPIO1_DR寄存器的bit3,為1表示輸出高電平,為0表示輸出低電平。

匯編由一條一條指令構成,指令就涉及到匯編指令。

Inta,b;
a=b;

假設a地址為0X20,b地址為0x30。

LDRR0,=0X30
LDRR1,[R0]
LDRR0,=0X20
STRR1,[R0]

我們在使用匯編編寫驅動的時候最常用的就是LDRSTR這兩個指令。

1、新建工程

新建工程文件夾:

0514775c-bebb-11ec-9e50-dac502259ad0.png新建裸機驅動文件夾052a9e6a-bebb-11ec-9e50-dac502259ad0.png新建LED燈文件夾

2、在VSCode中編寫代碼

ubuntu中我們使用的是VScode編輯器來寫代碼,跟在windows中新建項目一樣,新建項目、保存工作區,然后編寫代碼。

0544ed1a-bebb-11ec-9e50-dac502259ad0.png

3、編寫代碼

.global_start/*全局標號*/

_start:

/*1、使能所有時鐘ldf如果用大寫就全部用大寫,如果小寫就全部用小寫*/
ldrr0,=0X020C4068//將寄存器CCGR0地址0X020C4068存放到寄存器R0中
ldrr1,=0XFFFFFFFF//把寄存器x地址0Xffffffff存放到寄存器r1中
strr1,[r0]//把寄存器r1中的值(0XFFFFFFFF)寫入到寄存器r0里面的值作為地址的內存里面

ldrr0,=0X020C406C/*將寄存器CCGR1地址(0X020C4068)存放到寄存器R0中*/
strr1,[r0]

ldrr0,=0X020C4070/*CCGR2*/
strr1,[r0]

ldrr0,=0X020C4074/*CCGR3*/
strr1,[r0]

ldrr0,=0X020C4078/*CCGR4*/
strr1,[r0]

ldrr0,=0X020C407C/*CCGR5*/
strr1,[r0]

ldrr0,=0X020C4080/*CCGR6*/
strr1,[r0]

/*2、設置GPIO1_IO03復用為GPIO1_IO03*/
ldrr0,=0X020E0068/*將寄存器SW_MUX_GPIO1_IO03_BASE加載到r0中*/
ldrr1,=0X5/*設置寄存器SW_MUX_GPIO1_IO03_BASE的MUX_MODE為5*/
strr1,[r0]

/*3、配置GPIO1_IO03的IO屬性
*bit16:0HYS關閉
*bit[15:14]:00默認下拉
*bit[13]:0kepper功能
*bit[12]:1pull/keeper使能
*bit[11]:0關閉開路輸出
*bit[7:6]:10速度100Mhz
*bit[5:3]:110R0/6驅動能力
*bit[0]:0低轉換率
*/
ldrr0,=0X020E02F4/*寄存器SW_PAD_GPIO1_IO03_BASE*/
ldrr1,=0X10B0
strr1,[r0]

/*4、設置GPIO1_IO03為輸出*/
ldrr0,=0X0209C004/*寄存器GPIO1_GDIR*/
ldrr1,=0X0000008
strr1,[r0]

/*5、打開LED0
*設置GPIO1_IO03輸出低電平
*/
ldrr0,=0X0209C000/*寄存器GPIO1_DR*/
ldrr1,=0
strr1,[r0]

/*
*描述:loop死循環
*/
loop:
bloop
.global_start@全局標號
/**/

4、編譯代碼

使用如下三條命令來編譯代碼:

arm-linux-gnueabihf-gcc-g-cleds.s-oled.o
arm-linux-gnueabihf-ld-Ttext0X87800000led.o-oled.elf
arm-linux-gnueabihf-objcopy-Obinary-S-gled.elfled.bin
0544ed1a-bebb-11ec-9e50-dac502259ad0.png編譯、鏈接、格式轉換

最終生成了led.oled.elfled.bin三個文件。

5、燒寫代碼

STM32中代碼燒寫到內部FLASH。IMX6ULL支持SD卡、EMMC、NAND、nor、SPI flash等啟動。裸機例程選擇燒寫到SD卡里面。在ubuntu下向SD卡燒寫裸機bin文件。燒寫不是將bin文件拷貝到SD卡中,而是將bin文件燒寫到SD卡絕對地址上。而且對于I.MX而言,不能直接燒寫bin文件,比如先在bin文件前面添加頭部。完成這個工作,需要使用正點原子提供的imxdownload軟件。

05782c7a-bebb-11ec-9e50-dac502259ad0.png利用FileZilla Client軟件將imxdownload軟件發送到工程目錄下

燒寫的三個命令:

ls/dev/sd*-l
chmod777imxdownload
./imxdownloadled.bin/dev/sdb

Imxdownload使用方法,確定要燒寫的SD卡文件,需要使用ls /dev/sd* -l命令來檢測SD是哪一個文件,我的是/dev/sdb。

0591fbaa-bebb-11ec-9e50-dac502259ad0.png05a6262a-bebb-11ec-9e50-dac502259ad0.png插拔SD卡可以看到兩個的區別

給予imxdownload可執行權限:Chmod 777 imxdownload

燒寫:./imxdownload led.bin /dev/sdb

05b68eac-bebb-11ec-9e50-dac502259ad0.png向SD卡燒寫完成

Imxdownlaod會向led.bin添加一個頭部,生成新的load.imx文件,這個load.imx文件就是最終燒寫到SD卡里面去的。

05cd3fee-bebb-11ec-9e50-dac502259ad0.png

這里要注意的是如果燒寫的速度在幾十MB/S左右的話,那么可能意味著燒寫失敗了。而且是因為SD卡沒找到而導致燒寫失敗,這個問題只能重啟 ubuntu解決。

05dd6072-bebb-11ec-9e50-dac502259ad0.png

之后就可以從讀卡器中把SD拔下來,然后插入到開發板中,將撥碼開關拔止SD卡模式,供電之后,藍色LED亮,紅色LED滅,兩秒鐘之后紅色LED亮。

05f52842-bebb-11ec-9e50-dac502259ad0.png

最后,你覺得哪個板子點燈最簡單呢?

原文標題:史上最全的LED點燈程序!

文章出處:【微信公眾號:凡億PCB】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1629

    文章

    21729

    瀏覽量

    603012
  • led
    led
    +關注

    關注

    242

    文章

    23252

    瀏覽量

    660587
  • STM32
    +關注

    關注

    2270

    文章

    10895

    瀏覽量

    355744

原文標題:史上最全的LED點燈程序!

文章出處:【微信號:FANYPCB,微信公眾號:凡億PCB】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何利用STM32點亮LED?

    如何利用STM32點亮LED?
    發表于 11-29 06:57

    使用STM32點亮LED的方法

    摘要:不知道小伙伴們點亮過多少板子LED,有很多小伙伴留言說講一下stm32、fpga、
    發表于 11-29 06:14

    史上最全的LED點燈程序資料大合集

    摘要:你點亮過多少板子LED呢?有很多小伙伴留言說講一下STM32、FPGA、
    發表于 11-29 08:29

    如何利用stm32點亮led

    stm32點亮ledstm32原理建立工程文件三級目錄
    發表于 01-07 07:08

    如何利用STM32CubeMX點亮LED?

    如何利用STM32CubeMX點亮LED?
    發表于 02-08 07:20

    如何使用STM32CubeMX點亮LED

    如何使用STM32CubeMX點亮LED?
    發表于 02-10 06:45

    LED點亮程序

    LED點亮程序,適合初學者使用,單片機c語言程序。
    發表于 03-15 10:42 ?6次下載

    使用寄存器點亮LED

    stm32是我們會寄存器點亮LED
    發表于 12-01 15:30 ?0次下載

    史上最全的LED點燈程序—使用STM32、FPGA、Linux點亮你的LED

    摘要:不知道小伙伴們點亮過多少板子LED,有很多小伙伴留言說講一下stm32fpga、
    發表于 11-19 13:36 ?20次下載
    史上最全的<b class='flag-5'>LED</b>點燈程序—使用<b class='flag-5'>STM32</b>、<b class='flag-5'>FPGA</b>、Linux<b class='flag-5'>點亮</b>你的<b class='flag-5'>LED</b><b class='flag-5'>燈</b>

    史上最全的LED點燈程序,你都掌握了嗎?

    摘要:你點亮過多少板子LED呢?有很多小伙伴留言說講一下STM32、FPGA
    發表于 11-19 14:36 ?9次下載
    史上最全的<b class='flag-5'>LED</b>點燈程序,你都掌握了嗎?

    stm32-kirk-lib使用筆記 - 005 點亮LED(基礎篇)

    stm32-kirk-lib使用筆記 - 005 點亮LED(基礎篇)
    發表于 12-05 14:06 ?9次下載
    <b class='flag-5'>stm32</b>-kirk-lib使用筆記 - 005 <b class='flag-5'>點亮</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>(基礎篇)

    STM32入坑教程(一)點亮一個LED

    STM32入門教程(一)點亮一個LED隨表聊聊配置流程一.初始化引腳二.主函數中實現邏輯備注隨表聊聊作為所有入坑單片機的同學來說,第一個單片機程序必然是
    發表于 12-24 19:34 ?9次下載
    <b class='flag-5'>STM32</b>入坑教程(一)<b class='flag-5'>點亮</b>一個<b class='flag-5'>LED</b><b class='flag-5'>燈</b>

    STM32F103實驗一:點亮LED

    STM32F103點亮LED
    發表于 12-27 18:36 ?49次下載
    <b class='flag-5'>STM32</b>F103實驗一:<b class='flag-5'>點亮</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>

    使用STM32、SFPGA和I.MX6ULL IO點亮LED

    摘要:你點亮過多少板子LED呢?有很多小伙伴要求講一下STM32、FPGA、
    的頭像 發表于 03-12 09:24 ?2924次閱讀

    STM32F407-點亮LED

    點亮LED需要首先初始化。這塊STM32F4開發板的LED共有4個,都是鏈接到GPIO上的。
    發表于 06-07 16:46 ?2202次閱讀
    <b class='flag-5'>STM32</b>F407-<b class='flag-5'>點亮</b><b class='flag-5'>LED</b><b class='flag-5'>燈</b>
    主站蜘蛛池模板: 俄罗斯mm| 国产精品视频yy9099| 国产午夜免费视频片夜色| 久久人妻少妇嫩草AV無碼| 日本一本道高清码v| 一级毛片直接看| 大桥未久电影在线观看| 久久国产精品久久国产精品| 日本久久黄色| 91精品视频网站| 国产一区二区无码蜜芽精品| 男女牲交全过程免费播放| 翁熄性放纵交换300章| 中文字幕在线观看国产| 国产高清-国产av| 日本大尺码喷液过程视频| 艳鉧动漫1~6全集观看在线| 高清国语自产拍在线| 嗯啊…嗯np男男双性总受| 亚洲综合视频| 国模大胆一区二区三区| 跳蛋按摩棒玉势PLAY高H| 成 人 免费 黄 色 网站无毒下载| 老男人粗大猛| 真实农村女人野外自拍照片| 国产在线观看码高清视频| 四虎永久精品视频在线| 大学生宿舍飞机china free| 欧美四虎精品二区免费| 40岁东北老阿姨无码| 久久精品一区二区免费看| 亚洲精品久久午夜麻豆| 国产啪视频在线播放观看| 熟妇无码乱子成人精品| 高挑人妻无奈张开腿| 三级网站午夜三级| 国产黄A片在线观看永久免费麻豆| 日本色呦呦| 国产精品人成在线播放新网站| 偷拍自偷拍亚洲精品| 国产偷抇久久精品A片蜜臀AV|