痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
樓主: ysc

AVR與STM8 學習心得

  [複製鏈接]
 樓主| 發表於 2014-4-14 18:14:24 | 顯示全部樓層
雄爸爸 發表於 2014-4-14 05:15 PM static/image/common/back.gif
我吃硬不吃軟~~~~路過看熱鬧而已


單晶片的程式並不算軟,尤其用組合語言寫的跟硬體息息相關,寫了30年組合語言程式我都跟人家說是做硬體的,寫標準平台之類的程式才能算軟體吧。

發表於 2014-4-14 18:51:32 | 顯示全部樓層
ysc 發表於 2014-4-14 06:14 PM static/image/common/back.gif
單晶片的程式並不算軟,尤其用組合語言寫的跟硬體息息相關,寫了30年組合語言程式我都跟人家說是做硬體的 ...

單晶片類的都是軟硬兼施啦.
雖然不是開放式平台,不過單晶片的也是一種小平台.
發表於 2014-4-14 20:22:35 | 顯示全部樓層
本帖最後由 jojoling 於 2014-4-14 08:25 PM 編輯

簡單說明我的想法。
如果我是ysc,我也會選STM8,因為這個結合了本身的工作。且最重要的一點就是~~太便宜了。其他的理由都不重要。

但是,我還是建議選擇AVR8來當玩具。
底下是我的想法:
1. CSIC vs RISC. AVR8
一直都是精簡指令集~內部暫存器多,也一直都是高效能CPU與編譯器的重點。
STM8它網站的迷思,他拿他的24Mhz CPU跟 AVR 16Mhz的CPU比效能快。
且STM8內部的指令長度,在它的指令表裏,有太多格式~不利效能。
2.有時它的特點反而是它的缺點,如文件 4.3 p19~此系統把bus mix在一起~可能容易使用program memory/eeprom memory/ram,但是就是如底下所說:
4.3
As the address space is unified, the architecture allows data to be stored also in the Flash
memory and program to be fetched also from RAM (data bus). In this later case the
performance is impacted, besides the fact that data and fetch operation share the same bus,
the instructions will be fetched one byte at a time, thus taking longer (1 cycle /byte).

5.2 Data memory conflicts
3 types of operations perform accesses to the data memory:
● Effective address computation in case of indirect addressing
● Data read: source operand
● Data write: destination for store or read-modify-write operations
In case of simultaneous accesses to the same memory area both in execution stage (write)
and decoding stage (read), the decode stage is stalled till the execution stage releases the
resource.
3.之前提到的用 stack 當作 local vairable,是的,在我們常見的 IA32(X86)系統下,大部份的編譯器都這樣用,但是,那是特點,不代表優點。最簡單的例子就是 IA64的程式,預設都是用 register來傳遞,優點在1裏面詳述了。register 愈多,其實校能是更好。
就像 STM8使用 3 stage pipeline~而 AVR8只需要 2 stage pipeline~
4. STM8設計出來是想試看看能不能吃掉很多市場,如Freescale的汽車市場~相對的它的很多設計是很專業的市場導向,example CAN supported~
5. STM8 有96個指令~20種定址模式~對於專業人士,特定應用,好好好~
但是呢?對一些連組語都學沒多少的,只是讓他們更頭痛~
6.給那個 fatzeros~誰說你搞懂STM8就可以無痛玩STM32? 如我沒看錯,跟本只有那個debugger能共用而以。
7. Timer的問題,是的,沒錯,STM8更加的多樣化,但~~
專業 vs 玩具~~我還是建議那些連 MCU都不太熟的人,AVR很好用了~又有 arduino 可參考。

當然STM8是真的有很多特點。如高抗干擾的I/O腳~較新的技術~多樣化符合消費市場的產品~超便宜的定價~~~

參考文件:
STM8 CPU Programming manual.pdf
InstructionSet doc0856.pdf

評分

2

查看全部評分

 樓主| 發表於 2014-4-14 20:47:03 | 顯示全部樓層
本帖最後由 ysc 於 2014-4-14 08:48 PM 編輯
jojoling 發表於 2014-4-14 08:22 PM static/image/common/back.gif
簡單說明我的想法。
如果我是ysc,我也會選STM8,因為這個結合了本身的工作。且最重要的一點就是~~太便宜了 ...



非常認同!價格是主要因素。

對AVR最不爽的是沒有bit反向指令,對於控制用途為主的應用真的很不方便。

AVR為人詬病的FUSE也是一個問題,若是SMD包裝在產品階段燒錯了,那就很麻煩了,STM8在程式執行階段還可以修改Optional byte內容,大概ST有看到AVR造成的不便。

其實我不會太在意RISC或CISC,能抓老鼠的貓就是好貓,AVR與STM8就算性能有差異也不會相去太遠,比起51系列好太多了,現在使用24M的89C52一個週期要500nS,很多指令都還是2週期以上,大家也不是用得很高興?做出來的產品也跑得嚇嚇叫啊。

評分

3

查看全部評分

發表於 2014-4-14 21:02:52 | 顯示全部樓層
沒啦,我只是反應出,作功課中常看到的特點之一,
我沒有說stm8之後可以無痛升stm32啦!
畢竟核心都不一樣了,一個是6052改,一個是arm架構,有差啦!

只是stm還有一個對岸常在說的優點,就是庫程式,
也就是說,官網上(我之前說的那裡)已經有一些寫好的參考程式,
可以讓你直接使用,以stm32為大宗,
stm8的也慢慢的在作了!

另外,C的compiler和IDE ,stm也幫你傳便便了,
官網上有STVD內建組語compiler(IDE),
另外,還有COSMIC的C compiler可以掛在STVD上使用,雖然有32Kb一年的限制,但也夠了!
如果,你想要用IAR的話,也有,有30天無大小限制使用和8Kb限制二種免費使用的授權模式!
如果堅持要免費授權,我有找到SDCC FOR STM7及8,這個還沒研究,
以上這些都是不錯的資源。
 樓主| 發表於 2014-4-14 21:46:59 | 顯示全部樓層
本帖最後由 ysc 於 2014-4-14 09:48 PM 編輯

前面說到AVR沒有Bit Complement指令,連 SET BIT (SBI)、CLEAR BIT (CBI) 指令也只能用在I/O Register範圍,對於將旗號設在RAM裡操作非常不方便,除非將1個BYTE當作1個旗號,但這又太浪費RAM。

總感覺AVR布林運算比較弱了一點。

發表於 2014-4-14 23:22:14 | 顯示全部樓層
看到大家討論的"嚇嚇叫"!! 我真的無言+汗顏,這幾天忙著為我的 GPS 7段顯示時鐘的抓不到GPS但是顯示不會閃爍 或是抓到GPS 但是顯示會閃爍搞的焦頭爛額,今天心一橫還是把他掛上去了,抓得到GPS 不閃爍但是會有點殘影(前一個位數的字亮的部分會影響到下一位數"微微的亮),我是已經放棄組合語言了,我用C 所以很多進一步的技巧都需要 範例參考,DEBUG 方面更需要一些軟硬體的工具,當然 價錢也是一個考慮,但是回頭想想做玩具根本也沒太多功夫做太多..

  兩個問題來驗證何種工具可以解決: 接受 RS232的信號 GPS 來驅動 顯示器 1602 , RS232的接受訊息是否準確... 1602 受到驅動的訊號 時序 命令... 當這兩個問題出現時怎麼辦? 換MCU 本來 12T 換成 1T 這時候程式要如何來改! 如何用最快速的方法來解決?
發表於 2014-4-14 23:44:48 | 顯示全部樓層
今天在回收場找到黑晶爐的IC STM8  903K3 好幾片 看看可以不可以從這裡進入...

DSC07870.JPG

DSC07871.JPG

DSC07872.JPG

希望大家可以幫忙提供相關的工具  軟硬體 如 下載器 C編譯器 相關的運用範例... 感謝!!
 樓主| 發表於 2014-4-15 00:27:46 | 顯示全部樓層
本帖最後由 ysc 於 2014-4-15 12:31 AM 編輯
antlu 發表於 2014-4-14 11:22 PM static/image/common/back.gif
看到大家討論的"嚇嚇叫"!! 我真的無言+汗顏,這幾天忙著為我的 GPS 7段顯示時鐘的抓不到GPS但是顯示不會閃爍 ...


這個現象應該是GPS接收程序與顯示掃描程序執行時間互相拖累到,這必須改變程式架構,用中斷方式接收GPS送來的資料,以免耗太多時間在接收上面。

顯示器最好也用計時器中斷來掃描,並將計時器中斷定為最高優先權,這樣顯示時序才會穩定。

以慣用的方式來驅動1602,會花很多時間在1602的延時,我大部分都是在RAM內宣告一個顯示BUFFER,程式中要顯示的資料都往BUFFER丟,然後在每1mS中斷程式裡有段程序負責一次送出一個字元到1602,也就是RAM BUFFER每個BYTE對應到1602顯示每個字的位置,有點類似軟體DMA,這樣就不會花太多時間在1602上面。

這種方式用C語言也寫得出來,只是比較麻煩而已,但為了CPU使用效率也不得不這麼做。

總之就是想辦法讓CPU執行有用的程序,不要讓寶貴的CPU花在殺時間的迴圈上(DELAY LOOP)。

 樓主| 發表於 2014-4-15 00:43:07 | 顯示全部樓層
antlu 發表於 2014-4-14 11:44 PM static/image/common/back.gif
今天在回收場找到黑晶爐的IC STM8  903K3 好幾片 看看可以不可以從這裡進入...

這樣也行?STM8在回收場也讓您挖到!
發表於 2014-4-15 01:00:34 | 顯示全部樓層
antlu 發表於 2014-4-14 11:22 PM static/image/common/back.gif
看到大家討論的"嚇嚇叫"!! 我真的無言+汗顏,這幾天忙著為我的 GPS 7段顯示時鐘的抓不到GPS但是顯示不會閃爍 ...

我只會把 RS232改成中斷~並放到 ring queue,主程式負責把 queue裏的資料送出display~
這個程式還不需要用 timer polling 去送資料到 1602~除非,啊乾又有新的想法加上其他的功能~
發表於 2014-4-15 01:02:40 | 顯示全部樓層
ysc 發表於 2014-4-15 12:43 AM static/image/common/back.gif
這樣也行?STM8在回收場也讓您挖到!

YSC大:
  這都要感謝你,我以前到回收場只看 LCM 和 8951 ,沒想到這次居然發現有這東西!! 看樣子又要從頭開始了解學習...
發表於 2014-4-15 01:03:10 | 顯示全部樓層
antlu 發表於 2014-4-14 11:44 PM static/image/common/back.gif
今天在回收場找到黑晶爐的IC STM8  903K3 好幾片 看看可以不可以從這裡進入...

阿乾大真厲害,什麼都有。

SWIM.jpg
這照片上的4條線應該就是SWIM接線,用ST-LINK來接應該就可以燒寫了。
 樓主| 發表於 2014-4-15 01:30:43 | 顯示全部樓層
本帖最後由 ysc 於 2014-4-15 01:37 AM 編輯
robotai 發表於 2014-4-15 01:03 AM static/image/common/back.gif
這照片上的4條線應該就是SWIM接線,用ST-LINK來接應該就可以燒寫了。


那四顆應該是電晶體吧?阿乾大貼出的第二張圖就有標示RST、SWIM,是用焊墊方式,可能生產線用治具+探針來燒寫的。

RST, SWIM, 再加上0V, VCC就可以用ST-LINK來燒錄程式了。

STM8.jpg
發表於 2014-4-15 02:02:28 | 顯示全部樓層
jojoling 發表於 2014-4-15 01:00 AM static/image/common/back.gif
我只會把 RS232改成中斷~並放到 ring queue,主程式負責把 queue裏的資料送出display~
這個程式還不需要 ...

jojoling大:

   void Timer0_isr(void) interrupt 1
{
// static unsigned int count;
TH0=(65536-1000)/256;                  //重新赋值 1ms
TL0=(65536-1000)%256;
    count++;
     DataPort= TempData[t]; // 每次中斷顯示1個數字 4次中斷完成時間顯示
     DrivePort= grid[t];
   t++;
   if(t>3)
    t=0;  
}

主程式...
while(1)
{

Get_Gps();//取 RS232 進來的 GPS 時間資料
         
         if(Gok )//若是 程序完成
      {
       Display_Data_Operation ();//轉換相關值到顯示
        Gok=0;
        }
   }
}

RS232 BAUD RATE 4800  約 1秒鐘發送一次資料串,若是使用 1602顯示比較沒問題因為只要送出一次資料給 LCM1602 這樣就算不更新他也會一直保持顯示,但是 若是用一個PORT(8BIT) 作為7段字節顯示 另外4BIT 作為4位數點亮,這樣因為沒有 LATCH 功能所以要用視覺暫留的方式,所以我才採用它.

發表於 2014-4-15 09:44:52 | 顯示全部樓層
ysc 發表於 2014-4-10 12:55 AM static/image/common/back.gif
這是STM8S105系列的Memory map:

看來和6800一樣用 von-nunman 的 CPU 設計
這個對初學實在好的
發表於 2014-4-15 09:45:30 | 顯示全部樓層
antlu 發表於 2014-4-14 11:44 PM static/image/common/back.gif
今天在回收場找到黑晶爐的IC STM8  903K3 好幾片 看看可以不可以從這裡進入...

哈,大大厲害.....
甚麼都找得到
發表於 2014-4-15 09:49:48 | 顯示全部樓層
ysc 發表於 2014-4-14 06:08 PM static/image/common/back.gif
在露天拍賣買的,用「ST-LINK V2」就可搜尋到一堆,是買有鋁殼像隨身碟外型,一個250元附近,已經使用一陣 ...

大大, 謝謝你的資訊, 這個看起來跟淘寶的來源應該是一樣的, 俺還沒有空玩, 以前曾經看過
 樓主| 發表於 2014-4-15 10:09:42 | 顯示全部樓層
本帖最後由 ysc 於 2014-4-15 10:17 AM 編輯
xiaolaba 發表於 2014-4-15 09:44 AM static/image/common/back.gif
看來和6800一樣用 von-nunman 的 CPU 設計
這個對初學實在好的


STM8從MEMOEY MAP看來的確是von-nunman結構沒錯,但跟傳統CPU那種外接ROM、RAM共用BUS的狀況又不太一樣:
STMEM.jpg

在STM8 Programming manual裡面有寫到:
STMEM2.jpg

所以算是複合式的吧,實際上是Harvard結構,但位址分配邏輯上是von-nunman結構。

發表於 2014-4-15 10:25:24 | 顯示全部樓層
ysc 發表於 2014-4-15 10:09 AM static/image/common/back.gif
STM8從MEMOEY MAP看來的確是von-nunman結構沒錯,但跟傳統CPU那種外接ROM、RAM共用BUS的狀況又不太一樣: ...

哈,,,,不知道有人開始開蓋了沒

大大另外請教, 你研究了BOOT LOADER 沒. 有的話發表一下心得
 樓主| 發表於 2014-4-15 12:03:37 | 顯示全部樓層
本帖最後由 ysc 於 2014-4-15 12:22 PM 編輯
xiaolaba 發表於 2014-4-15 10:25 AM static/image/common/back.gif
哈,,,,不知道有人開始開蓋了沒

大大另外請教, 你研究了BOOT LOADER 沒. 有的話發表一下心得 ...


boot loader內部程式沒仔細研究,但用ST-LINK可以看得到,用一般USB TO UART配合原廠Flash Loader Demonstrator 來下載程式是沒問題的,ST原廠也有boot loader軟體介面說明,可以自己寫程式來下載,這個功能還算不錯。

boot loader要105以上才有,103跟003系列就沒有了。

Boot loader啟動時機:
1. flash rom是空的
2. option byte 裡optbl=$55, noptbl=$aa

以上兩點其中一點成立就可以啟動boot loader,
當boot loader可以被啟動時,reset之後會先跳到boot loader裡等待1秒鐘,若無命令送入則跳到正常啟動程序,若有命令送入則執行boot loader相對應功能。

目前使用boot loader唯一的不便是要手動按Rreset,也要在1秒內按下電腦next按鈕,要不然就會溜過去,網路上有找到自動Reset的方法,說是Flash Loader Demonstrator按下next鈕時會短暫送出DTS、RTS訊號,可以拿來當RESET用,但試了好久RTS、DTS都沒訊號出來,USB TO UART介面訊號確定是正常的,因為用其他軟體是可以正常控制DTS、RTS輸出。



發表於 2014-4-15 12:26:42 | 顯示全部樓層
ysc 發表於 2014-4-15 12:03 PM static/image/common/back.gif
boot loader內部程式沒仔細研究,但用ST-LINK可以看得到,用一般USB TO UART配合原廠Flash Loader Demons ...

請問103和105大概多少錢
價差夠大就自己寫個user monitor
應該可行吧
發表於 2014-4-15 12:33:21 | 顯示全部樓層
路過學習一下...有一段時間沒摸它了...我都用 keil c 居多

我的想法,把 application 拿出來討論,這樣就會熱起來了...
ex: wireless、display or smart phone ... etc

目前講述太底層,很多站友可能都沒經驗..不知如何表達..{:9_585:}
 樓主| 發表於 2014-4-15 12:41:01 | 顯示全部樓層
本帖最後由 ysc 於 2014-4-15 12:43 PM 編輯
xiaolaba 發表於 2014-4-15 12:26 PM static/image/common/back.gif
請問103和105大概多少錢
價差夠大就自己寫個user monitor
應該可行吧


以TQFP 32包裝來說價錢差不多,103的優點在於多了3根I/O PIN可用,103、003有TSSOP 20可選,105沒這種包裝。

boot loader只有下載程式功能,要做除錯、監視內部狀態還是ST-LINK比較好用,畢竟也不貴,跟STVD搭配性也比較好。

自己寫燒錄程式是一定要的,產品在客戶端更新時一定不能用標準檔案,要不然隨便拿一顆空的就給複製進去了。



 樓主| 發表於 2014-4-15 12:51:38 | 顯示全部樓層
本帖最後由 ysc 於 2014-4-15 01:15 PM 編輯

可以自己寫程式來控制boot loader是否啟動,
呼叫 EN_BOOT即可將Boot loader功能打開,
呼叫DIS_BOOT則是關閉。

EN_BOOT:
        CALLR     EN_OPT
        MOV       OPTBL,#$55
        CALLR     WW_EOP
        MOV       NOPTBL,#$AA
        CALLR     WW_EOP
        JRA         DIS_OPT
;
DIS_BOOT:
        CALLR     EN_OPT
        CLR        OPTBL
        CALLR    WW_EOP
        CLR        NOPTBL
        CALLR    WW_EOP
        JRA        DIS_OPT
;
;-----------------------------------------------------------
EN_OPT:
        BSET     FLASH_CR2,#7              ;SET OPT BIT
        BRES     FLASH_NCR2,#7
EN_EEPROM:
        MOV      FLASH_DUKR,#$AE
        MOV      FLASH_DUKR,#$56
        RET
;
DIS_OPT:
        BRES     FLASH_CR2,#7              ;CLEAR OPT BIT
        BSET     FLASH_NCR2,#7
DIS_EEPROM:
        BRES     FLASH_IAPSR,#3              ;CLEAR        DUL
        JRA       DIS_F1

;-----------------------------------------------------------
WW_EOP:
        BTJF     FLASH_IAPSR,#2,WW_EOP               ;CHK EOP
        RET
;------------------------------------------------------------

STM8將option byte視同eeprom,這樣的寫入方式夠簡單吧?
Flash rom的寫入也差不多是這樣。

發表於 2014-4-15 13:57:15 | 顯示全部樓層
xiaolaba 發表於 2014-4-15 11:26 AM static/image/common/back.gif
請問103和105大概多少錢
價差夠大就自己寫個user monitor
應該可行吧

219.pdf (258.67 KB, 下載次數: 20) 網路取得的mouser 價格表,大家參考看看,有需要可以團購.
發表於 2014-4-15 16:21:14 | 顯示全部樓層
ysc 發表於 2014-4-15 12:51 PM static/image/common/back.gif
可以自己寫程式來控制boot loader是否啟動,
呼叫 EN_BOOT即可將Boot loader功能打開,
呼叫DIS_BOOT則是關 ...

大大這個很方便
不過俺的意思是
stm能不能像avr一樣
在沒有bootloader的型號
自己燒一個user monitor
靠一支io的狀態選擇進入
或者有沒有在user code 調用rom routine
當然俺是不知道st有沒公開或是能不能自己dump
 樓主| 發表於 2014-4-15 16:53:44 | 顯示全部樓層
本帖最後由 ysc 於 2014-4-15 05:13 PM 編輯
xiaolaba 發表於 2014-4-15 04:21 PM static/image/common/back.gif
大大這個很方便
不過俺的意思是
stm能不能像avr一樣


這個有喔,STM8 FLASH也可以分割UBC大小,放入自己的開機導引程式,就如同arduino將導引程式放在AVR的Boot Block一樣。

STM8被劃定的UBC區塊只能由ST-LINK來抹除、燒錄,IAP程式無法寫入這些區塊,如此可以避免更新失敗時變成死機。

STM8S105所內含的boot loader可由STVD經ST-LINK讀取並加以DISASSEMBLER,追蹤一下就可了解程式內容。

UBC.jpg

STM8S105 Boot loader是放在$6000~$67ff,除了在STVD裡看得到之外,只要了解其程式內容,從自己寫的程式去呼叫也沒問題,他就大辣辣的放在那裡,隨時都接觸得到。

其實STM8這麼簡單的抹除、寫入FLASH、EEPROM,自己寫燒錄程式也是容易的。


發表於 2014-4-15 17:25:41 | 顯示全部樓層
ysc 發表於 2014-4-15 04:53 PM static/image/common/back.gif
這個有喔,STM8 FLASH也可以分割UBC大小,放入自己的開機導引程式,就如同arduino將導引程式放在AVR的Boo ...

大大謝謝妳的資料
看來你已經刨到底了
啥時出本書呢
 樓主| 發表於 2014-4-15 18:49:42 | 顯示全部樓層
xiaolaba 發表於 2014-4-15 05:25 PM static/image/common/back.gif
大大謝謝妳的資料
看來你已經刨到底了
啥時出本書呢

我也才開始學習2~3星期而已,是上次發消息跟您請教之後才開始找資料的。

說到寫書呢....人家對岸AVR、STM8的書都賣到台灣來了,而且內容也相當有料,這時候才開始寫已經太慢了!

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2024-4-28 05:38 AM , Processed in 0.098215 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.