Funpack第一期 - 好大一只榮哥哥自我介紹
姓名:好大一只榮哥哥
公司或?qū)W校:待業(yè),換工作過程中(前任職單位;成都伊利乳業(yè)有限責(zé)任公司)
職務(wù)或?qū)I(yè)及年級:待業(yè)人員(前任職單位:人力資源專員)
硬件介紹(控制器及外設(shè),應(yīng)用方向及應(yīng)用場景) ODYSSEY – STM32MP157C
設(shè)計(jì)思路(用板子的哪些模塊實(shí)現(xiàn)了什么功能)
通過M4核心通過GPIO控制呼吸燈。
通過linux A7核心實(shí)現(xiàn)python驅(qū)動(dòng)OLED屏幕進(jìn)行顯示。
指定功能演示:
一、準(zhǔn)備工作:軟件:MobaXterm:可串口,可SSH,可以上傳文件到系統(tǒng)板。 WinSCP:管理文件比MobaXterm更為方便快捷。 Etcher:寫入固件到SD卡使用。 硬①系統(tǒng)板 ②USBtoTTL轉(zhuǎn)接線、面包線若干(公對公,公對母、母對母都有準(zhǔn)備) ③Type-C電源線(使用手機(jī)的充電器供電) ④LED三色燈 ⑤128*64 OLED屏幕 ⑥當(dāng)然還有PC端
固件寫入SD卡,通過TTL轉(zhuǎn)接線連接(com端口要按wiki設(shè)置正確),通電從SD卡啟動(dòng),修改啟動(dòng)dtb為full,重啟后根據(jù)官方wiki進(jìn)行WiFi設(shè)置。 更新系統(tǒng)
sudo apt update 安裝 vim git ssh wget curl gcc make python3 python3-pip等常用工具:
sudo apt install vim ssh git wget curl gcc make -ysudo apt install python3 python3-pip -y 安裝對應(yīng)的內(nèi)核頭文件,可以直接在板上編譯應(yīng)用程序、內(nèi)核模塊、設(shè)備樹,避免了前期搭建交叉編譯環(huán)境的麻煩。
sudo apt install linux-headers-$(uname -r) -y
-----------------基礎(chǔ)工作基本完成 ---------------- 二、第一個(gè)指定功能: 驅(qū)動(dòng)LED燈亮,使其實(shí)現(xiàn)呼吸燈的效果;//使用STM32CubeTDE調(diào)試其M4核心實(shí)現(xiàn)。 首先,查看wiki文檔,PA3引腳可設(shè)置PWM輸出,則將LED插入PA3引腳,IDE中引腳相關(guān)設(shè)置: PA3引腳配置為M4核心使用,配置為TIM2_CH4;配置TIM2的Channel4為PWM Generation CH4,Prescaler修改為64-1,CounterMode修改為Up,CounterPeriod修改為1000-1,其余保持默認(rèn)設(shè)置。
詳見圖片設(shè)置:
然后在main.c中進(jìn)行代碼的修改及編寫: main函數(shù)如下:
int main(void){ /* USER CODE BEGIN 1 */ uint16_t dutyCycle = 0;//定義dutyCycle變量,初始值為0 /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ if(IS_ENGINEERING_BOOT_MODE()) { /* Configure the system clock */ SystemClock_Config(); } /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM2_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);//PWM引腳輸出模式 /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { while (dutyCycle < 1000) { dutyCycle++; __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4,dutyCycle);//變量小于1000時(shí),逐漸拉高 HAL_Delay(1); } HAL_Delay(100); while (dutyCycle > 0) { dutyCycle--; __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4,dutyCycle);//變量大于0時(shí),逐漸拉低 HAL_Delay(1); } HAL_Delay(400); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */} 修改完成之后進(jìn)行編譯,在CM4/debug/目錄下或者 CM4/Binaries/目錄下均會(huì)生成相應(yīng)的.elf文件。 轉(zhuǎn)到MobaXterm進(jìn)行固件的上傳及啟動(dòng)操作。ssh端進(jìn)入到 /lib/firmware/ 目錄下
cd /lib/firmware/ 再執(zhí)行:復(fù)制elf文件到此目錄:
cp /home/debian/ronggege1_CM4.elf . 通過echo命令將固件進(jìn)行啟動(dòng)準(zhǔn)備:
echo ronggege1_CM4.elf > /sys/class/remoteproc/remoteproc0/firmware 下面兩條命令可開始或停止運(yùn)行
echo start > /sys/class/remoteproc/remoteproc0/stateecho stop > /sys/class/remoteproc/remoteproc0/state 查看運(yùn)行狀態(tài):
cat /sys/class/remoteproc/remoteproc0/state 三、第二個(gè)指定功能: 成功驅(qū)動(dòng)SPI、I2C、UART三個(gè)外設(shè)中的其中一個(gè):驅(qū)動(dòng)I2C -128*64 OLED屏幕,使其顯示內(nèi)容。 首先完成128*64 oled屏幕硬件連接,使用1,3,5,9引腳一對一連接:
安裝i2c相關(guān)工具:
sudo apt-get install -y python-smbussudo apt-get install -y i2c-tools 在終端輸入命令查看連接狀態(tài):
i2cdetect -y 1 安裝Adafruit_Python_SSD1306庫:
sudo apt-get updatesudo apt-get install build-essential python-dev python-pipsudo pip install RPi.GPIOsudo apt-get install python-imaging python-smbussudo apt-get install gitgit clone https://gitee.com/xingguangk/Adafruit_Python_SSD1306cd Adafruit_Python_SSD1306sudo python setup.py install
安裝Luma.oled庫:
sudo apt-get install python-dev python-pip libfreetype6-dev libjpeg-devsudo -H pip install --upgrade pipsudo apt-get purge python-pipsudo -H pip3 install --upgrade luma.oled
//luma.oled庫安裝較慢,需要多次重試。
安裝好后我們新建一個(gè)oled.py文件,并粘貼以下內(nèi)容(演示中是在Windows環(huán)境下創(chuàng)建好之后直接上傳到debian用戶根目錄下)
from luma.core.interface.serial import i2c, spifrom luma.core.render import canvasfrom luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 # rev.1 users set port=0# substitute spi(device=0, port=0) below if using that interfaceserial = i2c(port=1, address=0x3C) # substitute ssd1331(...) or sh1106(...) below if using that devicedevice = ssd1306(serial) while 1: with canvas(device) as draw: draw.rectangle(device.bounding_box, outline="white", fill="black") draw.text((10, 30,), "Funpack ronggege", fill="white")
//第10行需要修改為所使用的屏幕的芯片型號,此處為ssd1306型號。
//第16行兩位數(shù)字為左上角開始的坐標(biāo)位置,可根據(jù)內(nèi)容進(jìn)行調(diào)整;雙引號中為需要顯示的英文字符串。 從git上的庫中包含很多示例文件,可顯示當(dāng)前時(shí)鐘,一些小游戲,圖形等等。 在所在的目錄下通過
python3 example.py 命令即可運(yùn)行相應(yīng)的程序進(jìn)行內(nèi)容顯示。
心得體會(huì) Funpack此次活動(dòng)剛開始其實(shí)有點(diǎn)猶豫,因?yàn)閷﹄娐芳俺绦蜷_發(fā)很有興趣,但是因?yàn)橹皢沃唤佑|過Arduino,但還是在朋友的鼓(song)勵(lì)(yong)下加入了進(jìn)來。可能更多的還是這塊板子的設(shè)計(jì)、架構(gòu)等和樹莓派等很像,可以實(shí)現(xiàn)智能家居等的確很吸引我。 作為一名人力資源從業(yè)者,這次跨行跨業(yè)加入這次活動(dòng),的確需要很大的勇氣,從最開始的一臉懵,到現(xiàn)在也可以進(jìn)行一些命令行操作,對linux和STM32開發(fā)也有了一個(gè)基礎(chǔ)的了解和認(rèn)知,雖然還是有一些程序的原理其實(shí)不是特別清楚,但是過程中遇到的很多問題可以從互聯(lián)網(wǎng)平臺尋找答案,眼前的濃霧在逐漸散開,也可以和朋友一起進(jìn)步,這種體驗(yàn)真的很好! 最后,真的感謝硬禾的這次活動(dòng),能夠認(rèn)識到更多興趣相仿的朋友,也鍛煉自己的“跨界”的能力,希望后面可以逐漸搭建出相要的智能家居中心,但是這可能需要更多的時(shí)間,時(shí)間不停在前行,學(xué)習(xí)的腳步也不能停下來。
更多精彩視頻分享請移步至硬禾學(xué)堂BBS論壇(也歡迎大家在本論壇里展開交流):https://bbs.eetree.cn/forum.php?mod=forumdisplay&fid=53
往期精彩
1. Funpack第一期開始Fund Back了,成功的同學(xué)都奔走相告,分享喜悅吧!
2. Funpack第一期精彩之二:Argon帶你用mqtt連OneNET,漂移菌帶你跑Linux和驅(qū)屏幕
3. 看頂尖芯片公司工程師寫總結(jié)報(bào)告(Funpack第一期精彩之三)
責(zé)任編輯:xj
原文標(biāo)題:HR都能將興趣發(fā)揮極致,身為電子工程師的你還在猶豫什么(Funnpack第一期精彩之四)
文章出處:【微信公眾號:FPGA入門到精通】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
電子工程師
+關(guān)注
關(guān)注
252文章
771瀏覽量
95664 -
Linux
+關(guān)注
關(guān)注
87文章
11329瀏覽量
209969 -
硬件
+關(guān)注
關(guān)注
11文章
3356瀏覽量
66348
原文標(biāo)題:HR都能將興趣發(fā)揮極致,身為電子工程師的你還在猶豫什么(Funnpack第一期精彩之四)
文章出處:【微信號:xiaojiaoyafpga,微信公眾號:電子森林】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論