久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> STM32 >> 瀏覽文章

IAR環(huán)境下STM32+IAP方案的實(shí)現(xiàn)

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年09月15日   【字體:

--基于STM32F103ZET6UART通訊實(shí)現(xiàn)

 
、什么IAP,為什么要IAP
      IAP即為In Application Programming(在應(yīng)用中編程),一般情況下STM32F10x系列芯片為主控制器的設(shè)備在出廠時(shí)就已經(jīng)使用J-Link仿真器將應(yīng)用代碼燒錄了,如果在設(shè)備使用過(guò)程中需要進(jìn)行應(yīng)用代碼更換、升級(jí)等操作的話,則可能需要將設(shè)備返回原廠拆解出來(lái)再使用J-Link重新燒錄代碼,這就增加了很多不必要的麻煩。站在用戶(hù)的角度來(lái)說(shuō),就是能讓用戶(hù)自己來(lái)更換設(shè)備里邊的代碼程序而廠家這邊只需要提供給用戶(hù)一個(gè)代碼文件即可。
      IAP卻能很好的解決掉這個(gè)難題,一片STM32芯片的Code(代碼)區(qū)內(nèi)一般只有一個(gè)用戶(hù)程序而IAP方案則是將代碼區(qū)劃分為兩部分,兩部分區(qū)域各存放一個(gè)程序,一個(gè)叫bootloader(引導(dǎo)加載程序)另一個(gè)user application(用戶(hù)應(yīng)用程序)bootloader出廠時(shí)固定下來(lái)了,在需要變更user application時(shí)只需要通過(guò)觸發(fā)bootloader對(duì)userapplication擦除和重新寫(xiě)入即可完成用戶(hù)應(yīng)用的更換。1-1所示
圖 1-1
      STM32F103ZET6的啟動(dòng)方式有三種:內(nèi)置FLASH啟動(dòng)、內(nèi)置SRAM啟動(dòng)、系統(tǒng)存儲(chǔ)器ROM啟動(dòng),通過(guò)BOOT0和BOOT1引腳設(shè)置可以選擇從哪中方式啟動(dòng)這里選擇內(nèi)置的FLASH啟動(dòng)。FLASH地址為0x08000000—0x0807ffff512KB這些都能從芯片數(shù)據(jù)手冊(cè)中直接得到。這里首要的一個(gè)問(wèn)題是中斷的問(wèn)題。正常情況下發(fā)生中斷的過(guò)程為:發(fā)生中斷(中斷請(qǐng)求)à中斷向量表查找中斷函數(shù)入口地址à跳轉(zhuǎn)到中斷函數(shù)à執(zhí)行中斷函數(shù)à中斷返回也就是說(shuō)在STM32內(nèi)置的Flash中一個(gè)中斷向量表來(lái)存放各個(gè)中斷服務(wù)函數(shù)的入口地址,內(nèi)置Flash的分配情況大致如下圖2-1
圖2-1
圖2-2
      STM32F10x有一個(gè)中斷向量表,這個(gè)中斷向量表存放在代碼開(kāi)始部分的后4個(gè)字節(jié)處(即0x08000004),代碼開(kāi)始的4個(gè)字節(jié)存放的是堆棧棧頂?shù)牡刂罚?/span>當(dāng)發(fā)生中斷后程序通過(guò)查找該表得到相應(yīng)的中斷服務(wù)程序入口地址,然后再跳到相應(yīng)的中斷服務(wù)程序中執(zhí)行。上電后從0x08000004處取出復(fù)位中斷向量的地址,然后跳轉(zhuǎn)到復(fù)位中斷程序的入口(標(biāo)號(hào)所示)執(zhí)行結(jié)束后跳轉(zhuǎn)到main函數(shù)中(標(biāo)號(hào)②所示)。在執(zhí)行main函數(shù)的過(guò)程中發(fā)生中斷STM32強(qiáng)制PC指針指回中斷向量(標(biāo)號(hào)所示)從中斷向量表中找到相應(yīng)的中斷函數(shù)入口地址,跳轉(zhuǎn)到相應(yīng)的中斷服務(wù)函數(shù)(標(biāo)號(hào)所示),執(zhí)行完中斷函數(shù)后返回到main函數(shù)中來(lái)(標(biāo)號(hào)所示)。
圖2-3
圖2-2
      對(duì)于步驟④⑤網(wǎng)友認(rèn)為是:“在main執(zhí)行的過(guò)程中如果CPU得到一個(gè)中斷請(qǐng)求,PC指針強(qiáng)制跳轉(zhuǎn)到地址0x08000004中斷向量表處,而不是新的中斷向量表,圖標(biāo)號(hào)所示程序再根據(jù)我們設(shè)置的中斷向量表偏移量,跳轉(zhuǎn)對(duì)應(yīng)中斷源新的中斷服務(wù)程序如圖標(biāo)號(hào)所示”。我對(duì)此的理解是:“當(dāng)發(fā)生中斷后,程序從0x08000004()處的中斷向量表中得到相應(yīng)的中斷服務(wù)函數(shù)入口地址,繼而跳轉(zhuǎn)相應(yīng)的中斷服務(wù)程序但是舊的中斷向量列表里邊存放的是IAP程序中斷函數(shù)的入口地址,它是如何得到user程序中斷函數(shù)的入口地址?所以覺(jué)得此種說(shuō)法是錯(cuò)誤的。當(dāng)發(fā)生中斷時(shí)PC指針強(qiáng)制會(huì)跳轉(zhuǎn)到0x08000004處”這種說(shuō)法并沒(méi)有錯(cuò),只是忽略了后續(xù)的一些知識(shí)要點(diǎn)導(dǎo)致這個(gè)說(shuō)法出現(xiàn)矛盾。
圖3-1
圖3-2
圖3-3
數(shù)據(jù)通過(guò)串口來(lái)傳輸文件常用的協(xié)議有XModem、YModem、ZModem這三種協(xié)議,在PC端使用這些協(xié)議傳輸文件只需要PC的超級(jí)終端或者終端工具SecureCRT即可,但是在STM32這邊的編程會(huì)增加一些困難(因?yàn)?/span>要先去讀懂、解析這些協(xié)議,在通過(guò)編程來(lái)實(shí)現(xiàn))。也可選擇自己定義一套簡(jiǎn)單的傳輸協(xié)議,同樣會(huì)有一些困難(因?yàn)?/span>要在PC進(jìn)行文件和串口編程)。總之不管通過(guò)什么辦法都行,只要能將xxx.bin文件數(shù)據(jù)通過(guò)串口全部發(fā)送到STM32并且STM32夠全部接收到這些數(shù)據(jù)并寫(xiě)入Flash即可(我選擇后者,自定義傳輸協(xié)議并用VC進(jìn)行文件和串口編程)
   使用通過(guò)UART的IAP方案并不是很好的選擇,這只是IAP方案的一個(gè)機(jī)制,因?yàn)槟苁褂?/span>PC機(jī)通過(guò)串口升級(jí)程序,同樣能通過(guò)Jlink燒寫(xiě)程序,并且自定義的串口通訊協(xié)議沒(méi)有校CRC校驗(yàn)的情況下不能及時(shí)發(fā)現(xiàn)數(shù)據(jù)傳輸過(guò)程發(fā)生的錯(cuò)誤。這里推薦使用SD卡(或U盤(pán))進(jìn)行用戶(hù)程序更新,*.bin文件復(fù)制到SD卡(或U盤(pán))中,STM32再通過(guò)讀取SD卡(或U盤(pán))*.bin文件進(jìn)行用戶(hù)程序更新,這也避免了STM32PC笨重的通訊,只需插一個(gè)SD卡(或U盤(pán))更顯得人性化一些,但需要去弄懂STM32如何與SD卡(或U盤(pán))的通訊。
關(guān)閉窗口
主站蜘蛛池模板: 一级黄色录像片 | 婷婷97| 国产精品一二三四区 | 日韩精品在线播放 | 亚洲欧美精品在线 | 九九精品在线观看 | 激情高潮到大叫狂喷水 | 午夜在线视频观看 | 视频一区二区在线播放 | 密乳av| 国产成人av在线 | 成人国产综合 | 日韩av免费在线观看 | 99婷婷| 国产又粗又猛又黄又爽无遮挡 | 香蕉久久久 | www.97超碰| 中文字幕在线看 | 亚洲天天操 | 欧美午夜视频 | 麻豆成人91精品二区三区 | 成人精品在线视频 | 可以免费看的av | 久久中文字幕视频 | 亚洲精品国产精品国自产观看 | 欧美在线视频一区 | 亚洲永久精品视频 | 成人精品在线视频 | 在线免费看a | 一区二区三区四区国产 | 亚洲精品999 | 精品在线观看视频 | 毛片网站在线观看 | 四虎影院永久免费 | 欧美高清一区二区 | 色播综合 | 性欧美精品 | 91操操操| 在线观看h视频 | 欧美午夜精品一区二区 | 国产精品99久久久久久久久久久久 |