嵌入式初學者入門的第一個“項目”就是LED點燈,那么,本文帶你看看51、STM32、Linux點燈有什么區別?
51點燈
51點燈,是很多單片機初學者的首選,難度也是相對比較低的。 準備工作: 51單片機開發,通常是直接操作寄存器,比如P1_0對應LED的IO口。 源代碼:sbit LED = P1^0;void main(){LED = 0;while(1);}
STM32點燈
相對于51點燈,STM32點燈難度系數要大一點,因為STM32外設資源更多,啟動文件更復雜,很多新手看到之后直接就放棄了。 其實,也很簡單,下面分別通過寄存器和標準外設庫點燈,你就知道明白了。 準備工作:-
STM32開發板
2.標準外設庫版本標準外設庫,就是ST官方已經把寄存器進行封裝過一次,你直接調用函數借口即可。/* 主函數*/int main(void){/*開啟 GPIOH 時鐘,使用外設時都要先開啟它的時鐘*/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);}
/* LED時鐘端口、引腳定義*/void LED_Init(){GPIO_InitTypeDef GPIO_InitStructure; //定義結構體變量RCC_APB2PeriphClockCmd(LED_PORT_RCC, ENABLE);GPIO_InitStructure.GPIO_Pin = LED_PIN; //選擇你要設置的IO口GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //設置推挽輸出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //設置傳輸速率GPIO_Init(LED_PORT,&GPIO_InitStructure); //初始化GPIOGPIO_SetBits(LED_PORT, LED_PIN); //將LED端口拉高,熄滅LED}int main(){LED_Init();GPIO_ResetBits(LED_PORT,GPIO_Pin_0);//點燈while(1);}
Linux點燈
Linux點燈,相對來說就更復雜了。當然,有一些已經搭建好的環境,就相對簡單一點,也比較容易。如果自己一步一步移植系統、寫驅動···就很復雜。 1.樹莓派我們這里以【開源庫wiringPi】為例:-
下載U-boot源碼,配置、編譯;
-
下載Linux內核、配置、編譯(一般開發板都會有現成的配置文件);
-
制作跟文件系統;(以上三個步驟,如果沒有一定的Linux基礎,可以使用一鍵燒寫)
-
移植開源庫WiringPi;
-
查看電路圖找到LED對應的引腳,程序需要用到引腳號;
-
編碼、交叉編譯;
-
下載運行。
2.Linux驅動點燈在所有的點燈方法中,這個方法難度系數極高,涵蓋了嵌入式開發從上層應用到底層驅動。步驟涉及了驅動代碼編寫、Linux內核模塊添加、移植操作系統、Linux應用程序編寫。 這里分享一下mini2440經典LED驅動源碼:int main(void){wiringPiSetup() ;pinMode (7, OUTPUT);gitalWrite(7, HIGH);while(1);}
驅動寫了,然后就是應用層代碼: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);
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;}
最后
點燈是基礎,如果你從事嵌入式開發,我覺得這些點燈是最基礎的第一步。 可能第一步很難,但走過第一步,相信下一步就會變得更容易。原文標題:嵌入式開發 | 51、STM32、Linux點燈的區別
文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。
審核編輯:彭菁
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
嵌入式
+關注
關注
5198文章
20449瀏覽量
334017 -
Linux
+關注
關注
88文章
11760瀏覽量
219020 -
LED點燈
+關注
關注
0文章
3瀏覽量
6937
原文標題:嵌入式開發 | 51、STM32、Linux點燈的區別
文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
51點燈實驗
記錄一些關于本人實驗課的總結,由于本人是新手小白,許多程序和電路圖較為粗略。提前看了一眼實驗一信號機控制實驗,雖然名字有點高大上但是最后就是一個51點燈實驗,附上實驗要求、代碼、protues仿真
發表于 11-30 06:19
STM32點燈程序分享
STM32F103點燈程序-適用于STM32F103C8T6、STM32F103RCT61.main函數#include "stm32f10x.h"int main(void
發表于 12-01 07:05
單片機裸機點燈
1.單片機裸機點燈–可以參考正點原子,筆者記得當時用stm32f103用各種方法點了半個月的燈(延時函數、pwm呼吸燈、定時器中斷)2.linux系統系統
發表于 12-17 06:09
史上最全的LED點燈程序—使用STM32、FPGA、Linux點亮你的LED燈
的led燈,大家大致看一下點燈流程和點燈環境以及點燈流程,就能大概的了解一下三者的區別,可以有選擇的去學習!一、使用STM32
發表于 11-19 13:36
?20次下載
<1>STM32點燈程序-庫函數
STM32F103點燈程序-適用于STM32F103C8T6、STM32F103RCT61.main函數#include "stm32f10x.h"int main(void
發表于 11-22 09:51
?23次下載
嵌入式驅動程序(5-1)點燈大師①之74HC595
嵌入式驅動程序(5-1)點燈大師①之74HC959作為一個嵌入式工程師,“點燈”是必備技能,哈哈哈(手動斜眼笑),除了普通IO口可以控制led燈亮滅之外,還有很多
發表于 11-24 10:51
?37次下載
stm32點燈之路
1、最近初學了單片機,開發板用的是星火的指南者。2、點燈程序沒有直接使用官方的固件庫,而是直接操作了寄存器的地址,這樣比較直觀的看到根源,畢竟庫是封裝過一層。3、點燈一共分為3步:打開時鐘、配置端口
發表于 12-31 19:15
?0次下載
STM32_按鍵點燈
學習32是一個循序漸進的過程,通過點燈可以了解到許許多多的知識,今天先講解按鍵點燈,明天會通過對比按鍵,寫中斷控制點燈的程序。直接通過原理圖
發表于 01-12 20:42
?6次下載
51、STM32、Linux點燈有什么區別?
嵌入式初學者入門的第一個“項目”就是LED點燈,那么,本文帶你看看51、STM32、Linux點燈有什么區別?
發表于 02-08 15:32
?17次下載
51點燈與Linux驅動點燈的區別
評論