2016年12月30日 星期五

再訪霞喀羅

霞喀羅著名的楓紅

最近心情特別亢奮,是因為原本被塵封的東海自然步道計劃,露出了曙光,頓時覺得充滿希望。因為對一個不會日文且有妻小的中年大叔來說,想要獨自去日本徒步旅行,本就是個遙不可及的想法。但在某次閒聊中,同事Chris表達對這步道也有興趣,依他多次日本自助行經驗,加上精通日文,若有他同行,必可以免去行程中許多不確定因素,更重要的是,兩人同行安全許多,對家人也有了交待。目標確定後,接著就是細部計畫。我們打算先走霞喀羅,一方面測試同行的默契,二方面可蒐集每日步行距離等資料,為後續計畫參考。

今天主角 Chris
霞喀羅步道位於新竹縣五峰鄉,全長約二十三公里,海拔高度約二千公尺,因為景色秀麗且富含人文歷史內涵,早就被歸為國家級步道,我也曾於兩三年前,多次造訪,都留下美好的印象。不過最近林務局網站都顯示封閉狀態,為求慎重,特別向上個月才去的朋友求證確定安全無虞後,才敢拉著Chris上山。

今年楓紅不盛

古道分成兩端,我們是由石鹿端進入,預計到白石後折返,但不知是太早起床還是路程太顛簸,抵達步道入口時,Chris已經頭昏腦脹無力背負重裝,我們順勢捨棄帳篷睡袋炊具等裝背,只帶著最基本輕裝就上路。

古道上楓紅

起初二公里,路程平緩,可用健步如飛來形容。二點五公里後,好運氣用畢,前方道路坍塌,必須高遶通過,而且這段高遶難度頗高,讓Chris吃盡苦頭直呼受騙。繼續走不是,撤退也不是,真是騎虎難下,還好我們沒有時間壓力,只要謹慎小心慢慢走,終究能通過考驗。就這樣兩人走走停停,終於在一個小時後結束高遶,接回正常路線。

高遶途中一小段情景

高遶後路段,都是沿山壁內側開鑿,雖然偶有坍方但都可以輕鬆通過。古道靜謐悠長,行走其上,感覺好像是踏著落葉舖成的柔軟地毯,抬頭則是參天巨木和雲霧組成的世界,四周寂靜無聲,徜徉在美好的境界裡,不禁生起,江畔何人初見月,江月何年初照人之感,希望這情景能永遠維持,不只是一百年前先人可領略,更能讓後世人繼續留存。

林間景致

我們兩人有一搭沒一搭的聊著公司和彼此生活經驗,兼談及日本徒步旅行計畫。Chris年紀小我十一歲,據他自述,是典型宅男,日文是從小熱愛動漫和日劇,耳濡目染無師自通學來,工作時認真負責,閒暇以吹奏直笛為樂。根據我在科技公司工作多年經驗,宅男加富有責任感,多半就是還無法找到另一半,Chris情況更特別,還淪落到和大叔一起去日本徒步旅行的窘境啊。



接近中午十二點,雖然距離白石駐在所還遠,但也只能依計畫折返原路回家。回程是緩降坡,隨著高度遞降,眼前風景也非常不同,原本朗朗晴空越往下走突然變成雲海,我們就這樣由陽光普照直接進入雲霧中,霧中的杉樹林水氣瀰漫,凝結在樹梢和葉緣,更多是黏附在蜘蛛網上,將原本獵捕昆蟲的死亡陷阱,轉化成森林中一叢叢造型各異的精美水晶作品,令人目不暇給。





下山後,回想行前兩人信誓旦旦要背重裝抵達白石駐在所,就覺得好笑,能夠平安下山,就是萬幸。希望Chris能忘記暈車和高遶的辛苦,記得美麗的雲海和霧景,保持信心,和我一同去日本徒步旅行。







2016年12月23日 星期五

二度竹東上觀霧 單車行

單車在林間奔馳

繼上次由竹東經清泉至觀霧後,仍念念不忘這段路途,一方面是喜歡沿途景緻,二方面是想測試同一路線騎第二次是否會更輕鬆。

路邊向日葵

結果都是肯定的,高山騎行的視野和微涼空氣讓人通體舒暢,而且舊地重遊因為能掌握進度,騎起來更輕鬆,除此之外,此行還誤打誤撞,去了兩個新景點,一是抵達觀霧後順遊大鹿林道西線,二是回程時改由充滿挑戰性的民生道路回清泉。

下公館好吃包子

行程由竹東開始,先在下公館啃了兩個肉包,慢慢往前,行經軟橋時特意減慢速度,好欣賞這寧靜且祥和的依山傍水客家忖落,再往前就是上瑞和五峰,拖拖拉拉終於抵達清泉。從竹東到清泉路程長約25公里,卻"僅"爬昇四百公尺,整體來說,舒適有餘,挑戰性卻不足。爾後可能可依照目地不同做些改變,若想騎短距離路線,可由竹東出發到清泉,轉入白蘭部落後再由五指山回程。高山路線則將出發點改至桃山派出所,省去前段時間,移去大鹿林道西線看風景。

原鄉總是有許多類似房舍

清泉後就是持續爬坡,因為是第二次上山,較能掌握距離和休息節奏,感覺很愜意,途中巧遇單車同好,聊天中得知,他是和車隊朋友一同出遊,山貓車隊假日時彼此呼朋引伴轉戰南北,今天目標是觀霧,另外還會約著去雪霸農場聚餐。哇,騎車除了健身更能聯繫情感,真是讓人羨慕。

爺巴堪溪

十一點多抵達觀霧,看天氣晴朗,臨時起意繼續向大鹿林道西線前進,這段路原本是為載運木材,但幾十年來禁伐天然林政策影響下,已經不再運作,若不是林道終點有國家級軍事設施(450億的鋪爪式雷達站),早就和全台各地林道一樣,因為颱風地震土石流而肝腸寸斷荒廢消失。

路上一景

拜國防部之賜,這裡路況比山下還平整好騎。藍天白雲下,只見我和小愛車在樹海間快速穿梭,騎累了,隨地坐下休息,看雲朵飛逝,聽鳥囀蟲鳴,那種舒暢真是言語難以形容。真希望家人也能同來體會。

離開大鹿西線回程時,在15K處雜貨店休息,此處視野遼闊,同時也是附近聚落的集散地,根據地圖資料,除一般道路外,此處有產業道路(雲山道路)下切至溪谷,再由對岸民生道路回清泉。經不起內心小惡魔慫恿,決定捨棄舒適好走的柏油路,走這充滿挑戰性替代道路回家。

雲山道路旁茶園


路程前段是民宿和茶園,接著就是一連串沿著山勢直接開設出來的Z字形下坡,路面雖然顛坡但還在公路車可承受範圍內,隨著高度遞減,路旁植物也由杉木變成雜林,終於降至最低處,俠客羅溪,在這舉目四望,全無人跡,好像進入山谷的心臟中,被大山包覆著般的神祕感,雖然後段上坡讓我痛苦不已,但若下次有機會,還是會選擇再度造訪。

俠客樓橋



清泉吊橋

路邊小女孩與愛狗

2016年12月13日 星期二

參加阿帕拉契小徑分享會

講座安排在一間十人通鋪中舉行 滿滿人群中我可能是年紀最大者

某周六夜,在台北南勢角背包客棧參加[我們的信仰是山],阿帕拉契小徑行程分享。經過主講人崇鳳的說明,對這小徑的種種有了更多認識,當然更加深了有朝一日要親臨這步道的心。

若連同這個演講,我手邊有三本書與這小徑有關,當然還看過影集 A Walk in the Woods (中文譯名別跟山過不去,由老牌演員勞勃瑞福主演)。經由這些資料的幫助,已經可以在腦海中勾勒出這山徑的輪廓。
主講者 十分感性的介紹旅程

地形上,阿帕拉契小徑因位於美國東部,屬於古老地層,長年受風化作用影響,屬於平緩無奇的丘陵地形,加上高緯度因素,林相單純且多為針葉林。想像中類似於陽明山八煙古道或巴福越嶺道。環境上,小徑屬於國家級步道系統,長年有巡邏人員和志工維護,與文明社會距離不遠,安全和便捷度高。種種分析都指向,若時間許可,完成小徑旅程並不困難。諷刺的是,這時代最困難的不是資訊取得,也不是金錢,而是挪出足夠的時間。

即使如此,我相信排除萬難達成目標的結果會是豐腴的,這小徑溫和平淡無奇,而且距離夠長(3500公里相當於北高來回五次),完全適合我這喜歡徒步的個性。待青島湖和八一冰川計畫完成後,就來規畫這個行程。

主講者於旅途中手記

除阿帕拉契外,類似長程步道還有日本東海自然步道,似乎更適合我。網路上有步道基本介紹,還有當地人徒步記錄,因為看不懂日文這篇澳洲人完徒記錄英文書寫反而更有幫助。

南勢角背包客棧

2016年12月11日 星期日

荒山騎行 竹37暨向天湖

會想到陳順築 迢迢路

竹37是隱蔽在五指山下的產業道路,連結新竹北埔與苗栗東河兩地,其東部分支可達五峰鄉大隘,南部分支可延伸至向天湖,這兩地分別是賽夏族北、南兩群聚集地,因此竹37也是自古以來賽夏族遷徙連繫的古道。

竹37大致上都是類似景緻

兩年前參觀過北群大隘的矮靈祭,時光匆匆,今年恰逢十年大祭,計劃由北埔啟程,經竹37,進入苗栗南庄,騎上向天湖看祭典,入夜後再由峨眉回北埔。約中午抵達南埔村,先到陳永斌木工教室拜望陳老師,幾年不見,老師居然還記得我。聊了一陣,知道老師仍充滿活力,孜孜不倦的從事工藝創作就十分開心。此行除了看望老師,還想評估是否要繼續荒廢的木工課,和老師聊過,發現漂流木或造型木已經很少,若繼續上課,會以板材為主,這讓我有些退卻。自己本來就個性保守,缺乏創意與想像力,若再受限板材,做的一定不開心。

南埔木工教室拜望老師 圖為老師作品


離開南埔村後,經過百年水車和老頭擺,大坪,北埔冷泉,抵達五指山下叉路,選右徑上山,沿途會先經過廢棄屋群,資料上提及此地在民國六十年左右盛產煤礦,有村落聚集。人去樓空只剩凋零。再往前是內豐國小舊址,牆壁上塗有紀念戰神標語,感覺很驚悚。這塗鴉應該和北埔事件有關。

內豐國小附近 戰神紀念碑

話說,早期的賽夏族居住在現今竹塹城附近,漢民族出現後就被驅趕到現今北埔附近,西元1835年遇到漢人武裝拓墾,再度遭到驅趕到目前竹37崇山峻嶺處。當時文字描述到,雙方戰事,血戰數十陣,戰歿無數,股內傾囊。可見其驚恐。漢民族接收此地後承平一段時日,接著進入日治時期,換成漢人無法忍受日本政府高壓統治,聯合曾經是死敵的大隘賽夏族共同反日,殘殺五十多當地日人,引來了軍隊鎮壓,後續的混戰,死的死,逃的逃,牽連及秘密處死不少人。史稱北埔事件。


沉重的血淚歷史。卻反映出記憶的短暫與荒謬,時至今日,賽夏人幾乎瀕臨完全漢化和消失,漢人也早就遺忘曾經侵略(原住民)和被侵略(日本民族)的歷史,日人同樣也沉入遺忘侵略(中國)和被侵略(美國)的記憶混亂中。這竹37舞台上曾經出現的族群,全數成為斯德哥爾摩症候群患者。

但認真且嚴格來看,並不是全部的記憶都會被遺忘,前面提到賽夏族受漢人壓迫移居苗栗東河後,遇到身高不到90公分的矮人族,合理推論當時為了爭奪地盤,賽夏族殲滅了矮人族。但又良心不安,就將豐年祭改為矮靈祭慰藉亡靈祈求矮人族原諒,從這個角度來看,同樣是侵略者,賽夏族就比漢人和日人顯得更為高尚了。

向天湖矮靈祭典

扯太遠了。拉回到竹37道路,因為這段路中間部分路段最寬只有一台小卡車可通行程度,會車困難,所以幾乎沒有車輛行駛,非常適合單車騎乘。兩邊林班地遍植柳杉和肖楠,遠望如林海般波浪起伏。也有三四個露營區和度假村可以住宿。

仙水觀音廟旁邊好笑的裝飾


從南埔騎到南庄了

抵達東河後,牽車過吊橋,當我氣喘吁吁騎到下中加拉灣時以為目標就在眼前,殊不知這只是起點,後續越爬越高,大約一小時後才騎到向天湖,騎車時看著天光雲影變換真的會覺得自然多麼偉大我是多麼渺小之感。

天光雲影

參觀矮靈祭後,夜騎峨眉湖回北埔,途中幾次想抄捷徑走山路,但山區道路沒有路燈就是整片墨黑,再加上野狗咆嘯,雙腿立刻癱軟乖乖轉回省道。

山裡頁騎好恐怖

2016年12月10日 星期六

臨老入花叢 馬拉松初體驗


雖然平時就會路跑,但也僅止於消遣性質。只有兩次失心瘋跑得比較遠。第一次是在新竹十八尖山,和同事邊聊天(罵老闆)邊跑著,不知不覺跑24公里,第二次是沿著淡水河,從台北市立美術館到淡水,美景相伴下跑了二十多公里。這唯二經驗都覺得身體尚能負荷,也能享受樂在其中快感。所以今年收到同事邀約參加新竹城市馬拉松時,就欣然同意前往了。

新竹城市馬拉松 路邊啦啦隊

馬拉松名稱源自古希臘的馬拉松戰役,42公里的路程象徵著人們對耐力考驗,這些都是從小就耳熟能詳事實,可見得長跑是個很古老的運動項目,但我小時候真的沒見過有誰在長跑,更沒聽過台灣有馬拉松賽事。只是短短幾年光景,馬拉松長跑就從從沒沒無聞變成蔚為風氣的活動,其中轉變令我十分好奇。

如果到馬拉松相關網站,簡單查詢就可看見洋洋灑灑數百場賽事任君挑選,若以地點來分,本島有馬拉松很正常,金門,馬祖,澎湖,蘭嶼,綠島,小琉球各離島居然都舉辦過,而且即便偏遠如阿里山和玉山塔塔加鞍部也都舉辦過賽事。再看舉辦型式,除了傳統型式外,各種花式路跑,舉凡灑粉塵的,穿拖鞋的,不穿鞋的,五花八門,真是應有盡有。

經過市區浸信會啦啦隊
如此眾多賽事,我卻一項部沒參加過,沒什麼原因 就是"懶",反而今年開始陸續聽到馬拉松活動有降溫跡象,報名人數顯著減少,我才首次報名參加,似乎有些慢半拍的感覺。不過沒關係,馬拉松的精神就是步調緩慢,橫豎也只是慢了半拍,來日方長(自我安慰中)。

活動當天,因地利之便,是由家中出發,五點半抵達會場,天色仍暗,見許多人影晃動,混亂中隨著人潮前進準備出發。只聽到擴音機傳來主持人報告,全馬報名人數超過四千人,超半馬也超過四千人,加上團體賽與娛樂組,總計有上萬人參加。心想,不是說馬拉松退燒了嗎,沒想到喜歡跑步的人還真多。

集合準備出發

路程前十公里均在新竹市區巡禮,自己是新竹市民,跑在熟悉市街上覺得很有趣。

路邊擺放曬米粉裝置藝術

接著是第一個長上坡,茄苳景觀大道,這路段平時禁止行人通行,趁著交管之便可以慢慢欣賞路旁風景。
茄苳景觀大道

轉下山進入青草湖區域,路程平緩,但從寶山進入科學園區陡上坡才是真正的考驗,起初還拼著跑,但看路人紛紛停下腳步,雙腳也不聽使喚的變成了步兵。一望無際的人龍,且各自都低頭慢走沒有互動,遠望像是江西趕屍隊伍。瀰漫著詭異感覺。

大家都跑不動 變成殭屍路跑了

進入科學園區後,全馬組右轉跑向園區三期,我們超半馬27公里則是直行。看著全馬組的背影,衡量自己體力還行,心頭不斷冒出我也要跑全馬的聲音。離開園區進入寶山路,距離終點只有三公里時幾度想要步行,還好路邊加油聲音很大,讓我堅持了下去直到終點,成績普普,排名約在全體前五分之一。

原來這就是補給站 有水 運動飲料 香蕉 葡萄

因為是第一次參加活動,賽事好壞說不太準,但是在熟悉地點跑步感覺很有趣。主辦單位在路邊安排許多啦啦隊,還有豐富的補給,好像嘉年華會,更像是媽祖出巡般熱鬧滾滾。為跑步這個原本屬於很個人私密的活動,加入不同的元素。

終點就在前面

活動雖然結束,但想要繼續跑的心,卻更加強烈,我已經報名下一場全馬,2017年二月底新社賞櫻 (影片介紹),期待活動到來,看看究竟能跑到多遠的距離。

接近青草湖一餐廳前面荒謬裝置


2016年11月5日 星期六

技術筆記STM32F4

第一塊版子無法Touch,第二塊才行

製做熱感應紙相機玩具途中,大量使用STM32F4,因為是新手有許多不熟悉的地方,將些學習記錄筆記於此。(熱感應紙相機其他連結,例如演算法、機殼、電路設計在這邊,連結)

硬體Embedded System選擇

Embedded System是很籠統的概念,過去工作上接觸過公司自行設計專為數位相機量身訂做的ARC解決方案,也有醫療血糖機AVR ARM系統,不過我的玩具不複雜,不需要這些高端方案。市場上常見的RASPBERRY PI 或STM32 或ARDUINO即可應付。又ARDUINO過於單純,RASPBERRY PI整體系統過於龐大,選擇有下列優點的STM32F429。

  1. 內建浮點運算功能,方便圖型處理程式
  2. DCMI Camera interface,簡化影像擷取
  3. 眾多軟體、電路設計範例

開發環境( IDE和開發板 )

  1. KEIL:有最多範例,初期使用uVision 5.11(HAPPY版)。遇困難後使用新版( 5.21.1.0 )。安裝檔名應該是硬碟下的KeilMDK_68532.rar SIZE約300M
  2. IAR:手邊有"正版"軟體,不過範例太少,且IAR + I-JET + SWD組合下始終只能供電,無法RESET,放棄。
  3. CooCox:STM公司贊助的開源計畫,少使用者,暫時忽略。

開發板
第一種是:STM32開發板 F429 DISCOVERY:詳細規格如連結。以開發板來說,F4有兩種不同版子,STM32F4DISCOVERY32F429IDISCOVERY,前者是使用STM32F407G,沒有螢幕和外接SD RAM,後者才是TM使用開發板。
  • USB直接燒錄、供電和偵錯,接上行動電源就可使用,type A to mini-B。版子上還有個micro USB插孔可以做更多實驗。
  • 硬體: 靠近螢幕有兩組LED, 再旁邊有個按鈕, 靠近邊緣的LED是綠色 內部是紅色。
  • PIN腳圖放在這,方便連結。正面時 LCD在下方,左邊LED綠色 右邊LED紅色。
正面LCD在下由左至右
第二種是STM32半成品:F407 (SWD), F429 (SDRAM SWD) : KitSprout
上(STM32F429) 下(STM32F407)

第三種是OpenMV開發板,詳細資料參考此連結。

KEIL連結STM32F4

新版本KEIL + STM32 開始改採 STM新版HAL, 優點是可套用自動建立模版功能,但我IDE總是無法編譯。目前仍沿用舊版本。

舊版本KEIL + STM32 是使用時 STD_Periph_Drivers,這是以往大多數看到範例。

舊模式,不是自動產生檔案,而是拷貝TEMPLATE修改,又可以分為兩種:
一、改KitSprout範例
二、改TM範例,先拷貝至新目錄,用KEIL開啟,編譯。範例D:\stm\tm\touchscreen

目錄對應方式

Menu-Project-Mange-Project Items..

TM目錄結構內都有全部檔案,有需要時才include。操作方法:點選目錄右鍵,找到對應目錄,選EXIST的C檔案,編譯時H檔案會自動匯入。更換新的TM實驗項目時,除了CODE會改變,include 的TM的檔案也會改變,要使用點兩下IMPORT進入的方式。

另外,因為TM是通用型LIB,編譯前必須在MENU下拉選單中選擇適合CPU的版本,目前開發板選擇STM32F429I。配合自己的狀況,可以刪除很多用不到的裝置設定檔。

除此之外,也可以增刪TM LIB中不恰當檔案,變成非TM版本。例如兩個範例,LED間歇閃爍和按鈕。( TM是作者自行搭設的架構,方便學習,但成品專案大多還是會使用STM)



前面提到的方式,帶了太多檔案,進階是將LIB抽出,如此一來,就可以在不變動TM LIB狀況下,只要複製這個SRC和INCLUDE就可以產生新專案。如01-STM32F4xx_Keil_CMSIS_Default_Project。

如果要加入新目錄,執行下面兩個動作。
1. 選擇project - option - c/c++ - include
    加入目錄TMLIB
2. 在PROJECT目錄下,右鍵add group
    把New Group換一個名子(容易看就好 例如TMLIB)
    點兩下 就會跳出增加檔案的視窗 選擇相對應的.c .h,檔案就會自動帶入

基本流程

include內容反映檔案架構

1. ARM
#include 不在STM32中,屬於ARM範圍
     讓程式可以使用bool

2. STM
#include "stm32f4xx.h"  必備
#include "stm32f4xx_rcc.h"  依照不同需要加入
#include "stm32f4xx_tim.h"
#include "stm32f4xx_gpio.h"
    #define LED_GREEN GPIO_Pin_13  宣告GPIO等等對應名稱

3. USER
#include "system_control.h" INIT等固定宣告方式
stm32f4xx_conf.h   是STM提供,include不同組h,其他似乎assert

STM32F4 核心SKILL

學習範例連結,作者設計LIB層簡化使用者設定,廣泛流傳,有許多人參考此LIB將其精簡。
  • 基本架構 main() 基礎GPIO設定 loop迴圈
  • TIMER
    不用sleep,固定時間ms 範例
    DELAY的方法 範例
    clock speed 範例
  • DMA 範例
  • Interrupt
    Interrupts are important in microcontrollers. WIth them you are able to stop executing main program and jump to some predefined area if there is something important.這讓我想到我們做胰島素注射器時,interrrupt總是搞不定啊啊啊啊
    STM32F4使用的機制稱為
    NVIC or Nested Vector Interrupt Controller is used to dinamically tell which interrupt is more important and for enabling or disabling interrupts. It supports up to 256 different interrupt vectors. 範例  進階討論 進階討論
    外部中斷 範例 範例
  • RTC
    很大的主題 目前用不到 範例
    output clock 範例
  • WatchDog 範例
  • 亂數產生 範例  CRC範例
  • 波型產生DAC 範例
  • power consumption 範例 原ST的文件PDF
     
  • 超頻 範例
  • 浮點運算
    開啟F429浮點運算方法 FFT 範例1  範例2
  • USB->UART 似乎是避開燒錄機制開機?? 範例
  • printf 範例  stdio 範例

STM32F4 操作外部設備

  • GPIO 最基本
    範例 (先提不使用TM LIB , 再引入TM LIB) 進階討論
  • USART (TXRX)
    STM32F4有八組channel 先設定GPIO 設定UART 設定中斷項目 英文說明範例 中文範例
    硬體 : PC安裝TERMINAL, (手邊有 沒測) , 印表機 , GSM modules, GPRS, bluetooth
  • SPI(Serial peripheral interface)是一種主從式架構的同步資料協定,可以讓多個裝置在短距離互相通訊。在使用SPI最基本會有四個腳位:
    MISO:Master In, Slave Out
    MOSI:Master Out, Slave In
    SCK(SCLK or Clock):Serial 時脈
    SS/CS(Slave Select/Chip Select):LOW表示裝置可以與Master通訊;HIGH表示不與Master通訊
    範例
    SPI硬體,SD CARD MODULE
    SPI硬體,三軸感應範例 這是開發板內建裝置
    SPI硬體,加速器範例
  • ADC 範例
    實際ADC範例,麥克風類比取樣,轉成數位,做錄音存檔或音效處理
    自然界只存在類比信號,人類利用各種感知器(Sensor),將其數位化、量化,方便儲存, 資料處理, 運算比較, 如溫度sensor,紅外線測距, 流明度量測....。
  • ADC範例
    麥克風類比取樣,轉成數位,在遠端交談, 經網路數位傳輸,在近端經電腦DAC還原類比聲。電腦上通常有一顆或數顆IC,負責低速週邊控制,如 Super IO, Hardware Monitor, BMC, 通常此IC有 AD converter,以方便偵測電壓、溫度。電腦上有時會用影像頡取卡,就是把類比鏡頭的類比信號,轉成數位壓縮,方便儲存在硬碟。常見就是數位音響,將CD/DVD 光碟數位信號,轉成類比聲音信號,在從喇叭播出。電腦顯卡有VGA輸出的,也是由數位資料,轉成傳統電腦CRT螢幕的類比信號。(目前DVI/HDMI 都是數位調變輸出,再也不是類比信號)
  • I2C 範例
    Inter-Integrated Circuit is a multimaster serial single ended bus. This protocol is commonly used with RTC modules, temperature sensors, EEPROMs, IO expanders and more.
    硬體應用
    1. 觸碰螢幕( 是電阻式, 基本範例 , 兩塊開發板中一個功能故障 , 顯示觸碰點 ) 觸碰螢幕不重要,只是會阻礙不過,KEYPAD可以考慮 I2C
    2. 觸碰螢幕進階範例 ( 得去GIT上補足部份檔案 , 有BUTTON LIB)
    3. RTC 範例 DS1307
    4. 壓力偵測 範例
  • PWM 範例 沒有直接實驗 Pulse Width Modulation, or PWM, is a technique for getting analog results with digital means. Digital control is used to create a square wave, a signal switched between on and off. This on-off pattern can simulate voltages in between full on (5 Volts) and off (0 Volts) by changing the portion of the time the signal spends on versus the time that the signal spends off.
    進階範例
  • OneWire 範例 進階範例
  • VCP virtual com port USB模擬COM PORT 範例
  • USB
    MSC HOST可以讀取FAT範例
    HID HOST (Human Input Device) 可插入滑鼠和鍵盤 範例
    HID DEVICE 範例 自己變成滑鼠和鍵盤
較大型範例 範例一貪吃蛇
 螢幕
聲音學習和分辯範例連結

編譯原理



1.編譯,MDK軟件使用的編譯器是armcc和armasm,它們根據每個c/c++和彙編源文件編譯成對應的以".o"為尾碼名的對象文件(Object Code,也稱目標文件),其內容主要是從源文件編譯得到的機器碼,包含了代碼、數據以及調試使用的信息;

2.連結,連結器armlink把各個.o文件及庫文件連結成一個映像文件".axf"或".elf";

3.格式轉換,一般來說Windows或Linux系統使用連結器直接生成可執行映像文件elf後,內核根據該文件的信息加載後,就可以運行程序了,但在單片機平台上,需要把該文件的內容加載到晶片上,所以還需要對連結器生成的elf映像文件利用格式轉換器fromelf轉換成".bin"或".hex"文件,交給下載器下載到晶片的FLASH或ROM中。

參考連結

編譯(KEIL)

ARM買下了KEIL,所以內部KEIL MDK附屬的ARMCC對ARM的支援應該很好的。如果需要更新編譯時的參數。點選專案,按右鍵,選options for xxx,選C/C++這個TAB,最下面compiler control string是目前編譯參數。不太能改變,可以選中間Code Generation有不同的參數。

但如果遇到很多人使用的GCC,如果要把GCC的東西移植到ARMCC下,首先會遇到編譯imlib.h時發生錯誤     User\imlib.h(211): error:  #3092: anonymous unions are only supported in --gnu mode, or when enabled with #pragma anon_unions原因是 enum 的看待方式不同。

union在ARMCC下是不支援的。需要在.h中增加一行#pragma anon_unions  。但數量太多手工修改不切實際。


只要在Misc Controls增加--gnu 就可以使用GNU的GCC來編譯。延伸要注意的是,對startup_xxx.s也得在ASM選項中使用--gnu。因為ARMCC的格式和GCC完全不一樣。

編譯(TOOLCHAIN)

這篇中文翻譯非常好

連結一 英文
連結二 英文
連結三 windows 中文
連結四 linux 中文

armcc
armasm
armlink
armar
fromelf

燒錄


假定編譯成功了,得到一個 HEX 文件,也就是要燒寫的二進位代碼。

狀況一:一般使用ST-LINK或SWD

狀況一之一 使用KEIL

  1. I-JET:J-LINK手邊有"正版"工具,但KEIL + J-LINK + SWD組合下,外部供電問題無法解決,暫時放棄。
  2. STM32 Discovery開發板:內建ST燒錄器,無痛銜接。
  3. KitSprout處取得簡易燒錄器:SWD和供電一次解決,一個不到一百元,CP值超高。

狀況一之二:使用TOOLCHAIN

b.GCC命令行工具的,就需要再找下載程序用的軟體了

     如果是使用ST-Link,可以使用ST自己的STVP (Visual Programmer),這個東東在ST網站上可以下載到,不過是包含在九十兆左右的一個大包"ST Toolset"裡面。(下載URL  )這個軟體的介面是這個樣子的:


主菜單上面 Erase, Program, Verify, Read 功能很明了了,File-->Open可以加載HEX文件。第一次運行STVP的時候,要選擇ST-LINK調試器,和 SWD接口。


狀況二:還可以從串口下載程序,只需要把BOOT0跳線接上即可,因為STM32內帶了Bootloader.

需要"Flash Loader Demostrator"軟體,這個也可以從ST網站直接下載(URL )。下載前要把BOOT0跳線接上,使STM32進入Bootloader模式,USART1連接到PC的串口(我用的是FT232RL USB轉串口),把MCU加電。運行軟體,介面是這樣的:


選擇串口,然後點"Next",如果成功連上了,則介面變成下面這樣


點"Next"繼續


這時已顯示出識別出的STM32型號,點"Next"到下一步進行具體的操作。


OK, 下載HEX,擦除,上載(讀Flash內容) 功能都一看就明白了吧。


狀況三:從USB直接下載

需要ST的"DFUSe Demo"軟體,也是從ST網站下載的(URL )。也需要把BOOT0跳線接上,還必須連接USB口,然後PC提示找到了新硬體。安裝好驅動以後,再啟動軟體,介面如下:


不過現在不能把HEX文件直接寫入,而需要先生成dfu文件,使用一起安裝得到的"DFU File Manager"程序,從HEX生成dfu.


至於 VID, PID 我還是保留和原來的一致,不然得重新安裝驅動(為什麼要使用DFU文件我還沒理解清楚)。得到dfu文件就可以用上面的軟體燒寫了。

記憶體使用


無論是在規畫或是編譯(FLASH RAM)或是程式運作(HEAP)時,都和記憶體息息相關,因為數量多,特別拉出個筆記。連結

Debug方法

有SWO DEBUG 範例
Debug會隨著編譯方式有所不同,因為目前IDE是KEIL,就以KEIL為對象。雖然分成軟體模擬和硬體偵錯兩種,大多數人應該都是使用硬體偵錯。並且設定LINK
ToolBar上面有Start/Stop Debug Session(CTRL F5),啟動後,畫面如下。可以參考的教學




KEIL DEBUG畫面

各種螢幕

移到更詳細的連結

LIBC使用


大型程式,尤其是open source程式都使用許多standard library C的function,例如strdup等等,這些function放進STM32程式時,偶爾會有些問題,如 types.h、strdup。網路上有不少PORT的專案可參考,自己在編譯optrec時也有些處理。

CAMERA元件


移到更詳細的連結

熱感應印表機


移到更詳細的連結

專案筆記


main.c中控全部流程
  SystemInit();  設定<---- nbsp="" p="" style="font-family: "times new roman";" system_stm43f4xx.c="">  NVIC <--------- p="">  QMV_GPIO_Config 
<---- nbsp="" p="" system_stm43f4xx.c="">  打開 LCD
  打開 OV
  Camera_Start
  while(1){
     從CAMERA拿到影像
     決定送到印表機 print( (uint16_t*)frame_buffer);
     或是將影像放到螢幕上,就會造成liveview的錯覺
  }
}

print()
{
camera拿到的是image1
計算Dither
    準備送到印表機的資料是 bmpBlock
將影像放上螢幕
    LCD_ILI9341_DisplayImage((uint16_t*) image1);
}

有三個設定,討論呼叫源
void TIM3_IRQHandler(void)
system_control.c
TIM_Cmd(TIM3, ENABLE);
void TIM4_IRQHandler(void)
system_control.c
TIM_Cmd(TIM4, DISABLE);
void DMA2_Stream1_IRQHandler(void) DCMI溝通時會送出

---------------

system_stm32f4xx.c 有CLOCK和INIT設定
  void SystemInit(void)
  {
    都是一堆設定
  }
  SystemCoreClockUpdate(void)
  static void SetSysClock(void)
  void SystemInit_ExtMemCtl(void)

system_control.c
這是特別寫的,都是為了這台裝置按鈕和LED使用
  void STM_LedInit(void){
  void STM_ButtonInit(void){
  void STM_LedOn(uint16_t led){
  void STM_LedOff(uint16_t led){
  uint8_t STM_ButtonPressed(void){
  void STM_TimerInit(void){

stm32f4xx_it
系統和APP溝通,設定
如INTERRUPT的處理

stm32f4xx_conf
預設的include還有assert等

---------------

lcd_fonts.c  就是各種不同大小字型的resource檔案
lcd_ili9341.c
lcd_spi.c

---------------

OV7670_control.c 初始化 和DMA設定

SD Card


各項I/O中,SD CARD最是基本。無論是OPTREC或手邊玩具計劃,都可以利用它來寫LOG或儲存相片。方式上,可選擇SDIO或SPI,範例網站上都有提供,連結位置。電路板連線。

背面是SPI(PIN腳向右),由上而下依序是 3.3V GND MISO(DO)  MOSI(DI) SCLK CS
正面是SDIO(PIN腳向左),由上而下依序是 3.3V(VDD/3.3V)   GND(VSS1/GND)   D0(DAT0/PC8)   CMD(CMD/PD2)   CLK(CLK/PC12)   D3(CD/DAT3/PC11)   D2(DAT2/PC10)   D1(DAT1/PC9)   CO(VSS2/GND) 後面是對應開發板的腳位
SDIO還區分成 4bit 和1bit兩種模式

  1. 下載範例 編譯 ( 許多錯誤,後來直接GIT專案,編譯成功 )
  2. 系統預設是 SDIO(比較快) 的 4bit模式 ( 比較快) 如果沒改變就維持
  3. 連結SD CARD和開發板
  4. 放入SD卡 啟動 會看到SD模組燈亮 f_mount成功  f_open 失敗,查詢結果是FR_NOT_ENOUGH_CORE 是 (17) LFN working buffer could not be allocated
  5. 修改heap 成功寫入檔案。修改heap的方式,參考記憶體的段落。

無線通訊RF

RF Nordic範例
RFID 範例
GPS 範例

STM32家族


F1  72MHz  2UART

F3  72MHz  3UART
   相比F1 採用浮點計算單元(floating point unit —FPV),其浮點計算速度更快。相比F1 增加了一個UART,並且設有精細的USB埠,當通過USB連接至電腦時,UART1並不占用,比起F1這也就意味著F3中的UART1的功能更強,因為在使用F1時人們通常會避免使用UART1。

F4  168MHz  3UART

F429
STM32F429ZIT6 microcontroller featuring 2 Mbytes of Flash memory, 256 Kbytes of RAM in an LQFP144 package
On-board ST-LINK/V2 on STM32F429I-DISCO (old order code) or ST-LINK/V2-B on STM32F429I-DISC1 (new order code)
mbed™ -enabled (see http://mbed.org) with the new order code only
USB functions:
Debug port
Virtual COM port (with new order code only)
Mass storage (with new order code only)
Board power supply: through the USB bus or from an external 3 V or 5 V supply voltage
2.4" QVGA TFT LCD
64-Mbit SDRAM
L3GD20, ST-MEMS motion sensor 3-axis digital output gyroscope
Six LEDs:
LD1 (red/green) for USB communication
LD2 (red) for 3.3 V power-on
Two user LEDs: LD3 (green), LD4 (red)
Two USB OTG LEDs: LD5 (green) VBUS and LD6 (red) OC (over-current)
Two push-buttons (user and reset)
USB OTG with micro-AB connector
Extension header for LQFP144 I/Os for a quick connection to the prototyping board and an easy probing
Comprehensive free software including a variety of examples, part of STM32CubeF4 package or STSW-STM32138, for using legacy standard libraries

F7  216MHz  8UART 詳細STM32F7在2015問市 最新版OpenMV已進階到STM32F7。F7應用範例可以參考這裡。專業資料在這裡
  • 216MHz ARM Cortex-M7 STM32F746 in 216 BGA
  • 480×272 touch screen (capacitive) LCD connected to LTDC port of MCU
  • 2 digital microphones
  • Ethernet with LAN8720A connected via RMII
  • USB FS and USB HS with external PHY to get real HS speed of 480Mbps
  • Micro SD card connector
  • Camera connector
  • Audio input and output
  • External 64Mbit SDRAM connected via FMC
  • External 128Mbit FLASH connected via QSPI
  • STLink v2.1 for programming

MicroPython


除了C語言和KEIL外,另有一個分支蓬勃發展中,如連結 MicroPython