學習stm32過程中,發(fā)現網上絕大部分的教程都是C語言的教程,當然在所有公司的嵌入式開發(fā)過程中也是絕大部分使用的都是C語言,但是也會有一部分需要直接操作內核寄存器的需求,例如RTOS中切換任務的時候,也確實沒有找到有人專門用匯編語言做項目,故而專門用匯編語言實現一些外設的操作,以此來熟練掌握匯編語言,方便后續(xù)繼續(xù)學習rtos或者深入單片機的內核做一些研究,文章會記錄開發(fā)的流程和實現的代碼,有任何問題也請指出,方便一起學習,共同進步
新建匯編工程
第一步點擊工程,新建,由于我的開發(fā)板是如下的型號,所以選擇對應的芯片

新建工程
第二步選擇啟動文件,keil官方給芯片提供了啟動文件,按照如下選擇,啟動文件是匯編語言實現的,主要的功能是定義了堆??臻g,定義了中斷向量表,定義了reset函數,即上電后執(zhí)行的第一個函數,里邊具體的內容回頭有時間再詳細講解,由于reset函數中調用了系統(tǒng)時鐘初始化,所以需要選中固件中的core部分,見下圖,如果不選中CORE,則看到select列中為黃色,即有問題,選中CORE之后就顯示為綠色

CORE

啟動文件
第三步新增一個匯編文件如下

新增匯編文件
第四步,匯編文件中增加匯編代碼

main.s中的匯編代碼
第五步,編譯運行
編譯完成,調整下載器之后開始調試

調試界面
在main.s中的B .行打一個斷點,點擊開始運行后,會發(fā)現會運行到此處,實現了匯編語言的main函數,至此,最簡單的匯編工程就搭建好了

運行過程
關鍵字:STM32 新建
引用地址:
STM32新建匯編工程
推薦閱讀最新更新時間:2025-06-29 17:41
GD32F103學習筆記(3)——新建工程
一、新建本地工程文件夾 為了工程目錄更加清晰,我們在本地電腦上新建一個“工程模板”文件夾,在它之下再新建 6 個文件夾,具體如下: 名稱 作用 Doc 用來存放程序說明的文件,由寫程序的人添加 Libraries 存放的是庫文件 Listing 存放編譯器編譯時候產生的 C/匯編/鏈接的列表清單 Output 存放編譯產生的調試信息、hex 文件、預覽信息、封裝庫等 Project 用來存放工程 User 用戶編寫的驅動文件 在本地新建好文件夾后,把準備好的庫文件添加到相應的文件夾下: 名稱 作用 Doc 工程說明.txt Libraries CMSIS:里面放著跟 CM3 內核有關的庫文件 GD
[單片機]
中國新建晶圓廠短中期面臨高成本挑戰(zhàn),政府需投資補貼
根據集邦咨詢研究指出,2016年后規(guī)劃中國于新建的 晶圓 廠共有17座,其中12英寸 晶圓 廠有12座及8英寸 晶圓 廠有5座,從成本結構來看,新廠折舊成本高昂,加上人力成本的提升,以及近來因空白硅晶圓供不應求導致的材料價格飆升,短、中期面臨高成本挑戰(zhàn)。下面就隨半導體小編一起來了解一下相關內容吧。 從半導體廠的成本結構來看,可拆分成折舊、間接人員、材料及直接人員等項目,根據集邦咨詢調查顯示,以一座初期月產能約10k的28nm新晶圓廠作為假設基礎,其折舊成本占整體營收約為49%,相對于一線晶圓代工廠折舊成本占比約23.6%,以及二線廠的25%,新廠折舊成本高出近一倍。 觀察間接人員成本,由于新廠的關鍵技術人力不足,必須
[半導體設計/制造]
STM32 Complier Warning or errors
1. File Not Found refer: https://blog.csdn.net/u014266675/article/details/71108552?locationNum=8&fps=1 原因:文件雖然建立,但是對應的文件關系沒有在編譯option里面體現, 方法:如圖所示:
[單片機]
為什么STM32中運行的C程序執(zhí)行某些函數時死機?
問題產生環(huán)境: 1、STM32F1 MCU 中通過USART2使用PD7、PA2、 PA3實現RS485通信,RS485通信部分代碼測試是沒有問題的,很穩(wěn)定; 2、能過PA0模擬按鍵,當按下時向RS485從設備發(fā)送功能碼輪詢數據; 3、自已實現的RS485協(xié)議棧,功能碼0x1到0x6及0x16單獨測試是通過的; 4、程序能過3中的RS485協(xié)議棧實現的主、從機應用代碼。一主機少量(比如10個)從機時,測試沒有問題,但當從機達到100個時程序無響應死機了。 問題原因: 程序棧空間小了不能滿足100個從機(結構體為15字節(jié))所占的空間(STM32 程序默認??臻g為0x00000400,即1024字節(jié))。 問題簡單
[單片機]
初識STM32固件庫——我們認為管件庫應該是什么樣子的
一、STM32固件庫文件分析 匯編編寫的啟動文件startup_stm32f10x_hd.s 設置堆棧指針 設置PC指 初始化中斷向量表 配置系統(tǒng)時鐘 對用C庫函數 __main最終去到C的世界 時鐘配置文件 system_stm32f10x.c:將外部時鐘HSE=8M,經過PLL倍頻為72M 外設相關的(xx:GPIO UART I2C SPI FSMC) stm32f10x.h:實現內核之外的外設寄存器映射 stm32f10x_xx.h存放外設的初始化結構體、外設初始化結構體成員的參數列表、外設固件庫的函數聲明 stm32f10x_xx.c外設驅動函數庫文件 內和相關的 core_c
[單片機]
關于stm32串口下載的問題
今天在用stm32f103rct6調程序的時候,不知道怎么回事j-link不能下載了,好像還不是驅動的問題,是她徹底壞了,沒辦法只能用串口下載了,以前沒弄過,果然碰壁了。 首先、將boot0置1,boot1置0 其次就是串口的選擇問題,注意需要選擇串口1進行程序的下載
[單片機]
STM32 JTAG接口PB3PB4配置為IO口使用問題
因為IO口緊張,在原理繪制期間就利用了PB3和PB4,但是在調試程序的時候才發(fā)現,PB3和PB4控制不了。 查看了一下芯片手冊,發(fā)現芯片在上電后,居然默認是JTAG接口,怪自己粗心了。 JTAG和SWD接口對照如下圖。 我們可以看到PB3,PB4,PA15都被利用為JTAG接口中,SWD接口只要PA13,PA14。 所以為了重新使用PB3,PB4,我關閉JTAG功能, RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //開啟AFIO時鐘 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE); //禁止JTAG功
[單片機]
stm32異步串口通訊配置過程
| 串口是一種全雙工通訊方式 單工 數據傳輸只支持數據在一個方向上傳輸 半雙工 允許數據在兩個方向上傳輸,在同一時刻,只允許數據在一個方向上傳輸,它實際上是一種切換方向的單工通信 全雙工 允許數據同時在兩個方向上傳輸,因此,全雙工通信是兩個單工通信方式的結合,它要求發(fā)送設備和接收設備都有獨立的接收和發(fā)送能力 異步串口常見連接方式 相同端口數據傳輸 不同端口數據傳輸 這里必須保證通訊兩端數據共地,此外還需注意不同端口間的電平轉換,如TTL、232. | 異步通訊時序圖 這里以8位字長為例,進行數據傳輸時,接收方首先捕捉數據起始位- -由高電平到低電平的數據跳變,低電平會保持一個數據周期(空閑時,數據線保持高電平)
[單片機]