0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51點燈與Linux驅(qū)動點燈的區(qū)別

strongerHuang ? 來源:嵌入式專欄 ? 作者:嵌入式專欄 ? 2022-03-10 17:37 ? 次閱讀

嵌入式初學(xué)者入門的第一個“項目”就是LED點燈,那么,本文帶你看看51、STM32Linux點燈有什么區(qū)別?

51點燈

51點燈,是很多單片機初學(xué)者的首選,難度也是相對比較低的。 準(zhǔn)備工作: 51單片機開發(fā),通常是直接操作寄存器,比如P1_0對應(yīng)LED的IO口。 源代碼:
#include 
sbit LED = P1^0;
void main(){    LED = 0;
while(1);}

STM32點燈

相對于51點燈,STM32點燈難度系數(shù)要大一點,因為STM32外設(shè)資源更多,啟動文件更復(fù)雜,很多新手看到之后直接就放棄了。 其實,也很簡單,下面分別通過寄存器標(biāo)準(zhǔn)外設(shè)庫點燈,你就知道明白了。 準(zhǔn)備工作: 1.寄存器版本直接操作寄存器,需要深入理解每個寄存器每個bit位的含義(不建議初學(xué)者一開始就學(xué)寄存器),而且,源碼看起來比較多:
#include "stm32f4xx.h"
/* 主函數(shù)*/int main(void){    /*開啟 GPIOH 時鐘,使用外設(shè)時都要先開啟它的時鐘*/    RCC_AHB1ENR |= (1<<7);
    /* LED 端口初始化 */    /*GPIOH MODER10 清空*/    GPIOH_MODER &= ~( 0x03<< (2*10));
    /*PH10 MODER10 = 01b 輸出模式*/    GPIOH_MODER |= (1<<2*10);
    /*GPIOH OTYPER10 清空*/    GPIOH_OTYPER &= ~(1<<1*10);
    /*PH10 OTYPER10 = 0b 推挽模式*/    GPIOH_OTYPER |= (0<<1*10);
    /*GPIOH OSPEEDR10 清空*/    GPIOH_OSPEEDR &= ~(0x03<<2*10);
    /*PH10 OSPEEDR10 = 0b 速率 2MHz*/    GPIOH_OSPEEDR |= (0<<2*10);
    /*GPIOH PUPDR10 清空*/    GPIOH_PUPDR &= ~(0x03<<2*10);
    /*PH10 PUPDR10 = 01b 上拉模式*/    GPIOH_PUPDR |= (1<<2*10);
    /*PH10 BSRR 寄存器的 BR10 置 1,使引腳輸出低電平*/GPIOH_BSRR|=(1<<16<<10);//點燈
    while (1);}
2.標(biāo)準(zhǔn)外設(shè)庫版本標(biāo)準(zhǔn)外設(shè)庫,就是ST官方已經(jīng)把寄存器進(jìn)行封裝過一次,你直接調(diào)用函數(shù)借口即可。
#include "stm32f10x.h"
/*  LED時鐘端口、引腳定義*/#define LED_PORT       GPIOC   #define LED_PIN       GPIO_Pin_0#define LED_PORT_RCC            RCC_APB2Periph_GPIOC
void LED_Init(){    GPIO_InitTypeDef GPIO_InitStructure;        //定義結(jié)構(gòu)體變量
    RCC_APB2PeriphClockCmd(LED_PORT_RCC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = LED_PIN;                //選擇你要設(shè)置的IO口    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      //設(shè)置推挽輸出模式    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;       //設(shè)置傳輸速率    GPIO_Init(LED_PORT,&GPIO_InitStructure);              //初始化GPIO 
    GPIO_SetBits(LED_PORT, LED_PIN);                       //將LED端口拉高,熄滅LED}
int main(){  LED_Init();  GPIO_ResetBits(LED_PORT,GPIO_Pin_0);//點燈
    while(1);}

Linux點燈

Linux點燈,相對來說就更復(fù)雜了。當(dāng)然,有一些已經(jīng)搭建好的環(huán)境,就相對簡單一點,也比較容易。如果自己一步一步移植系統(tǒng)、寫驅(qū)動···就很復(fù)雜。 1.樹莓派我們這里以【開源庫wiringPi】為例:
  1. 下載U-boot源碼,配置、編譯;

  2. 下載Linux內(nèi)核、配置、編譯(一般開發(fā)板都會有現(xiàn)成的配置文件);

  3. 制作跟文件系統(tǒng);(以上三個步驟,如果沒有一定的Linux基礎(chǔ),可以使用一鍵燒寫)

  4. 移植開源庫WiringPi;

  5. 查看電路圖找到LED對應(yīng)的引腳,程序需要用到引腳號;

  6. 編碼、交叉編譯;

  7. 下載運行。

準(zhǔn)備工作做好之后,點燈的源碼就比較簡單:
#include 
int main(void){    wiringPiSetup() ;    pinMode (7, OUTPUT);    gitalWrite(7, HIGH);    while(1);}
2.Linux驅(qū)動點燈在所有的點燈方法中,這個方法難度系數(shù)極高,涵蓋了嵌入式開發(fā)從上層應(yīng)用到底層驅(qū)動。步驟涉及了驅(qū)動代碼編寫、Linux內(nèi)核模塊添加、移植操作系統(tǒng)、Linux應(yīng)用程序編寫。 這里分享一下mini2440經(jīng)典LED驅(qū)動源碼:
#include #include #include #include #include #include  #include  #include "led.h" 
static int led_open(struct inode *inode, struct file *file){      s3c2410_gpio_cfgpin(S3C2410_GPB(5), S3C2410_GPIO_OUTPUT);    s3c2410_gpio_setpin(S3C2410_GPB(5), 1);       return 0;} 
static int led_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg){      switch (cmd) {          case LED_ON:                s3c2410_gpio_setpin(S3C2410_GPB(5), 0);                return 0;          case LED_OFF:                s3c2410_gpio_setpin(S3C2410_GPB(5), 1);                return 0;          default:                return -EINVAL;          }} 
static struct file_operations led_fops = {      .owner = THIS_MODULE,      .open = led_open,      .ioctl = led_ioctl,}; 
static struct miscdevice led_misc = {      .minor = MISC_DYNAMIC_MINOR,      .name = "led",      .fops = &led_fops,}; 
static int led_init(void){      return misc_register(&led_misc);} 
static void led_exit(void){      misc_deregister(&led_misc);} 
MODULE_LICENSE("Dual BSD/GPL");module_init(led_init);module_exit(led_exit);
驅(qū)動寫了,然后就是應(yīng)用層代碼:
#include #include #include #include #include #include #include "led.h" 
int main(void){            int fd;             fd = open("/dev/led", O_RDWR);             if (fd < 0) {                        printf("No such device!
");                        return -1;            }             while (1) {                        ioctl(fd, LED_ON);                        sleep(1);                        ioctl(fd, LED_OFF);                        sleep(1);                }         
    close(fd);             return 0;}

最后

點燈是基礎(chǔ),如果你從事嵌入式開發(fā),我覺得這些點燈是最基礎(chǔ)的第一步。 可能第一步很難,但走過第一步,相信下一步就會變得更容易。

原文標(biāo)題:嵌入式開發(fā) | 51、STM32、Linux點燈的區(qū)別

文章出處:【微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5045

    文章

    18817

    瀏覽量

    298501
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207908
  • LED點燈
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    6730

原文標(biāo)題:嵌入式開發(fā) | 51、STM32、Linux點燈的區(qū)別

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式Linux驅(qū)動開發(fā)之點燈大法

    摘要:前面已經(jīng)介紹了使用裸機點燈,今天使用驅(qū)動開發(fā)的方式點亮一個LED??纯磧烧哂猩?b class='flag-5'>區(qū)別不?
    發(fā)表于 12-13 11:11 ?601次閱讀

    如何實現(xiàn)51單片機驅(qū)動繼電器模塊點燈?

    如何實現(xiàn)51單片機驅(qū)動繼電器模塊點燈?
    發(fā)表于 10-27 06:41

    51點燈實驗

    記錄一些關(guān)于本人實驗課的總結(jié),由于本人是新手小白,許多程序和電路圖較為粗略。提前看了一眼實驗一信號機控制實驗,雖然名字有點高大上但是最后就是一個51點燈實驗,附上實驗要求、代碼、protues仿真
    發(fā)表于 11-30 06:19

    STM32點燈程序分享

    STM32F103點燈程序-適用于STM32F103C8T6、STM32F103RCT61.main函數(shù)#include "stm32f10x.h"int main(void
    發(fā)表于 12-01 07:05

    單片機裸機點燈

    1.單片機裸機點燈–可以參考正點原子,筆者記得當(dāng)時用stm32f103用各種方法點了半個月的(延時函數(shù)、pwm呼吸、定時器中斷)2.linux系統(tǒng)系統(tǒng)
    發(fā)表于 12-17 06:09

    STM32點燈開始學(xué)習(xí)

    STM32點燈開始學(xué)習(xí)一款單片機都是從操作IO口開始,所以首先準(zhǔn)備點亮個LED,剛開始以為STM32和51類似,直接操作端口,但是
    發(fā)表于 01-12 08:08

    求大佬分享STM32F103點燈程序

    求大佬分享STM32F103點燈程序
    發(fā)表于 02-11 06:11

    51、STM32和Linux點燈有什么區(qū)別

    點燈有什么區(qū)別? 51點燈 51點燈,是很多單片機初學(xué)者的首選,難度也是相對比較低的。 準(zhǔn)備工作
    的頭像 發(fā)表于 09-30 10:19 ?2476次閱讀

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

    的led,大家大致看一下點燈流程和點燈環(huán)境以及點燈流程,就能大概的了解一下三者的區(qū)別,可以有選擇的去學(xué)習(xí)!一、使用STM32
    發(fā)表于 11-19 13:36 ?20次下載
    史上最全的LED<b class='flag-5'>點燈</b>程序—使用STM32、FPGA、<b class='flag-5'>Linux</b>點亮你的LED<b class='flag-5'>燈</b>

    嵌入式驅(qū)動程序(5-1)點燈大師①之74HC595

    嵌入式驅(qū)動程序(5-1)點燈大師①之74HC959作為一個嵌入式工程師,“點燈”是必備技能,哈哈哈(手動斜眼笑),除了普通IO口可以控制led亮滅之外,還有很多
    發(fā)表于 11-24 10:51 ?37次下載
    嵌入式<b class='flag-5'>驅(qū)動</b>程序(5-1)<b class='flag-5'>點燈</b>大師①之74HC595

    STM32F103點燈程序(寄存器)

    STM32F103點燈程序(寄存器)
    發(fā)表于 12-08 17:21 ?20次下載
    STM32F103<b class='flag-5'>點燈</b>程序(寄存器)

    stm32點燈之路

    1、最近初學(xué)了單片機,開發(fā)板用的是星火的指南者。2、點燈程序沒有直接使用官方的固件庫,而是直接操作了寄存器的地址,這樣比較直觀的看到根源,畢竟庫是封裝過一層。3、點燈一共分為3步:打開時鐘、配置端口
    發(fā)表于 12-31 19:15 ?0次下載
    stm32<b class='flag-5'>點燈</b>之路

    STM32_按鍵點燈

    學(xué)習(xí)32是一個循序漸進(jìn)的過程,通過點燈可以了解到許許多多的知識,今天先講解按鍵點燈,明天會通過對比按鍵,寫中斷控制點燈的程序。直接通過原理圖
    發(fā)表于 01-12 20:42 ?6次下載
    STM32_按鍵<b class='flag-5'>點燈</b>

    51、STM32、Linux點燈有什么區(qū)別?

    嵌入式初學(xué)者入門的第一個“項目”就是LED點燈,那么,本文帶你看看51、STM32、Linux點燈有什么區(qū)別?
    發(fā)表于 02-08 15:32 ?12次下載
    <b class='flag-5'>51</b>、STM32、<b class='flag-5'>Linux</b><b class='flag-5'>點燈</b>有什么<b class='flag-5'>區(qū)別</b>?

    CH552打樣燒錄,先點燈試試

    ch552點燈實驗
    的頭像 發(fā)表于 02-15 17:09 ?4149次閱讀
    CH552打樣燒錄,先<b class='flag-5'>點燈</b>試試