日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32 汇编程序——串口输出 Hello world

發布時間:2023/12/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32 汇编程序——串口输出 Hello world 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、UART介紹
  • 二、項目建立及編譯
    • 1.新建項目
    • 2.代碼
    • 3.編譯
  • 三、電路連接及燒錄
    • 1.串口連接
    • 2.燒錄
  • 四、串口輸出
  • 五、總結
  • 參考鏈接

一、UART介紹

通用同步異步收發器(Universal Synchronous Asynchronous Receiver and Transmitter)是一 個串行通信設備,可以靈活地與外部設備進行全雙工數據交換。有別于 USART 還有一個 UART(Universal Asynchronous Receiver and Transmitter),它是在 USART基礎上裁剪掉了同步通信功能,只有異步通信。簡單區分同步和異步就是看通信時需不需要對外提供時鐘輸 出,我們平時用的串口通信基本都是UART。 串行通信一般是以幀格式傳輸數據,即是一幀一幀的傳輸,每幀包含有起始信號、數 據信息、停止信息,可能還有校驗信息。USART就是對這些傳輸參數有具體規定,當然也 不是只有唯一一個參數值,很多參數值都可以自定義設置,只是增強它的兼容性。 USART滿足外部設備對工業標準 NRZ 異步串行數據格式的要求,并且使用了小數波 特率發生器,可以提供多種波特率,使得它的應用更加廣泛。USART支持同步單向通信和 半雙工單線通信;還支持局域互連網絡 LIN、智能卡(SmartCard)協議與 lrDA(紅外線數據協 會) SIRENDEC 規范。

二、項目建立及編譯

1.新建項目

①新建項目Project->New uVision Project
②芯片選擇STM32F103下的STM32F103C8
③點擊OK完成創建

2.代碼

①右擊Source Group1點擊選ADD New item to Gourp…
②新建hello.s文件

③代碼

;RCC寄存器地址映像 RCC_BASE EQU 0x40021000 RCC_CR EQU (RCC_BASE + 0x00) RCC_CFGR EQU (RCC_BASE + 0x04) RCC_CIR EQU (RCC_BASE + 0x08) RCC_APB2RSTR EQU (RCC_BASE + 0x0C) RCC_APB1RSTR EQU (RCC_BASE + 0x10) RCC_AHBENR EQU (RCC_BASE + 0x14) RCC_APB2ENR EQU (RCC_BASE + 0x18) RCC_APB1ENR EQU (RCC_BASE + 0x1C) RCC_BDCR EQU (RCC_BASE + 0x20) RCC_CSR EQU (RCC_BASE + 0x24) ;AFIO寄存器地址映像 AFIO_BASE EQU 0x40010000 AFIO_EVCR EQU (AFIO_BASE + 0x00) AFIO_MAPR EQU (AFIO_BASE + 0x04) AFIO_EXTICR1 EQU (AFIO_BASE + 0x08) AFIO_EXTICR2 EQU (AFIO_BASE + 0x0C) AFIO_EXTICR3 EQU (AFIO_BASE + 0x10) AFIO_EXTICR4 EQU (AFIO_BASE + 0x14) ;GPIOA寄存器地址映像 GPIOA_BASE EQU 0x40010800 GPIOA_CRL EQU (GPIOA_BASE + 0x00) GPIOA_CRH EQU (GPIOA_BASE + 0x04) GPIOA_IDR EQU (GPIOA_BASE + 0x08) GPIOA_ODR EQU (GPIOA_BASE + 0x0C) GPIOA_BSRR EQU (GPIOA_BASE + 0x10) GPIOA_BRR EQU (GPIOA_BASE + 0x14) GPIOA_LCKR EQU (GPIOA_BASE + 0x18) ;GPIO C口控制 GPIOC_BASE EQU 0x40011000 GPIOC_CRL EQU (GPIOC_BASE + 0x00) GPIOC_CRH EQU (GPIOC_BASE + 0x04) GPIOC_IDR EQU (GPIOC_BASE + 0x08) GPIOC_ODR EQU (GPIOC_BASE + 0x0C) GPIOC_BSRR EQU (GPIOC_BASE + 0x10) GPIOC_BRR EQU (GPIOC_BASE + 0x14) GPIOC_LCKR EQU (GPIOC_BASE + 0x18) ;串口1控制 USART1_BASE EQU 0x40013800 USART1_SR EQU (USART1_BASE + 0x00) USART1_DR EQU (USART1_BASE + 0x04) USART1_BRR EQU (USART1_BASE + 0x08) USART1_CR1 EQU (USART1_BASE + 0x0c) USART1_CR2 EQU (USART1_BASE + 0x10) USART1_CR3 EQU (USART1_BASE + 0x14) USART1_GTPR EQU (USART1_BASE + 0x18) ;NVIC寄存器地址 NVIC_BASE EQU 0xE000E000 NVIC_SETEN EQU (NVIC_BASE + 0x0010) ;SETENA寄存器陣列的起始地址 NVIC_IRQPRI EQU (NVIC_BASE + 0x0400) ;中斷優先級寄存器陣列的起始地址 NVIC_VECTTBL EQU (NVIC_BASE + 0x0D08) ;向量表偏移寄存器的地址 NVIC_AIRCR EQU (NVIC_BASE + 0x0D0C) ;應用程序中斷及復位控制寄存器的地址 SETENA0 EQU 0xE000E100 SETENA1 EQU 0xE000E104 ;SysTick寄存器地址 SysTick_BASE EQU 0xE000E010 SYSTICKCSR EQU (SysTick_BASE + 0x00) SYSTICKRVR EQU (SysTick_BASE + 0x04) ;FLASH緩沖寄存器地址映像 FLASH_ACR EQU 0x40022000 ;SCB_BASE EQU (SCS_BASE + 0x0D00) MSP_TOP EQU 0x20005000 ;主堆棧起始值 PSP_TOP EQU 0x20004E00 ;進程堆棧起始值 BitAlias_BASE EQU 0x22000000 ;位帶別名區起始地址 Flag1 EQU 0x20000200 b_flas EQU (BitAlias_BASE + (0x200*32) + (0*4)) ;位地址 b_05s EQU (BitAlias_BASE + (0x200*32) + (1*4)) ;位地址 DlyI EQU 0x20000204 DlyJ EQU 0x20000208 DlyK EQU 0x2000020C SysTim EQU 0x20000210 ;常數定義 Bit0 EQU 0x00000001 Bit1 EQU 0x00000002 Bit2 EQU 0x00000004 Bit3 EQU 0x00000008 Bit4 EQU 0x00000010 Bit5 EQU 0x00000020 Bit6 EQU 0x00000040 Bit7 EQU 0x00000080 Bit8 EQU 0x00000100 Bit9 EQU 0x00000200 Bit10 EQU 0x00000400 Bit11 EQU 0x00000800 Bit12 EQU 0x00001000 Bit13 EQU 0x00002000 Bit14 EQU 0x00004000 Bit15 EQU 0x00008000 Bit16 EQU 0x00010000 Bit17 EQU 0x00020000 Bit18 EQU 0x00040000 Bit19 EQU 0x00080000 Bit20 EQU 0x00100000 Bit21 EQU 0x00200000 Bit22 EQU 0x00400000 Bit23 EQU 0x00800000 Bit24 EQU 0x01000000 Bit25 EQU 0x02000000 Bit26 EQU 0x04000000 Bit27 EQU 0x08000000 Bit28 EQU 0x10000000 Bit29 EQU 0x20000000 Bit30 EQU 0x40000000 Bit31 EQU 0x80000000 ;向量表 AREA RESET, DATA, READONLY DCD MSP_TOP ;初始化主堆棧 DCD Start ;復位向量 DCD NMI_Handler ;NMI Handler DCD HardFault_Handler ;Hard Fault Handler DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD 0 DCD SysTick_Handler ;SysTick Handler SPACE 20 ;預留空間20字節 ;代碼段 AREA |.text|, CODE, READONLY ;主程序開始 ENTRY ;指示程序從這里開始執行 Start ;時鐘系統設置 ldr r0, =RCC_CR ldr r1, [r0] orr r1, #Bit16 str r1, [r0] ;開啟外部晶振使能 ;啟動外部8M晶振 ClkOk ldr r1, [r0] ands r1, #Bit17 beq ClkOk ;等待外部晶振就緒 ldr r1,[r0] orr r1,#Bit17 str r1,[r0] ;FLASH緩沖器 ldr r0, =FLASH_ACR mov r1, #0x00000032 str r1, [r0] ;設置PLL鎖相環倍率為7,HSE輸入不分頻 ldr r0, =RCC_CFGR ldr r1, [r0] orr r1, #(Bit18 :OR: Bit19 :OR: Bit20 :OR: Bit16 :OR: Bit14) orr r1, #Bit10 str r1, [r0] ;啟動PLL鎖相環 ldr r0, =RCC_CR ldr r1, [r0] orr r1, #Bit24 str r1, [r0] PllOk ldr r1, [r0] ands r1, #Bit25 beq PllOk ;選擇PLL時鐘作為系統時鐘 ldr r0, =RCC_CFGR ldr r1, [r0] orr r1, #(Bit18 :OR: Bit19 :OR: Bit20 :OR: Bit16 :OR: Bit14) orr r1, #Bit10 orr r1, #Bit1 str r1, [r0] ;其它RCC相關設置 ldr r0, =RCC_APB2ENR mov r1, #(Bit14 :OR: Bit4 :OR: Bit2) str r1, [r0] ;IO端口設置 ldr r0, =GPIOC_CRL ldr r1, [r0] orr r1, #(Bit28 :OR: Bit29) ;PC.7輸出模式,最大速度50MHz and r1, #(~Bit30 & ~Bit31) ;PC.7通用推挽輸出模式 str r1, [r0] ;PA9串口0發射腳 ldr r0, =GPIOA_CRH ldr r1, [r0] orr r1, #(Bit4 :OR: Bit5) ;PA.9輸出模式,最大速度50MHz orr r1, #Bit7 and r1, #~Bit6 ;10:復用功能推挽輸出模式 str r1, [r0] ldr r0, =USART1_BRR mov r1, #0x271 str r1, [r0] ;配置波特率-> 115200 ldr r0, =USART1_CR1 mov r1, #0x200c str r1, [r0] ;USART模塊總使能 發送與接收使能 ;71 02 00 00 2c 20 00 00 ;AFIO 參數設置 ;Systick 參數設置 ldr r0, =SYSTICKRVR ;Systick裝初值 mov r1, #9000 str r1, [r0] ldr r0, =SYSTICKCSR ;設定,啟動Systick mov r1, #0x03 str r1, [r0] ;NVIC ;ldr r0, =SETENA0 ;mov r1, 0x00800000 ;str r1, [r0] ;ldr r0, =SETENA1 ;mov r1, #0x00000100 ;str r1, [r0] ;切換成用戶級線程序模式 ldr r0, =PSP_TOP ;初始化線程堆棧 msr psp, r0 mov r0, #3 msr control, r0 ;初始化SRAM寄存器 mov r1, #0 ldr r0, =Flag1 str r1, [r0] ldr r0, =DlyI str r1, [r0] ldr r0, =DlyJ str r1, [r0] ldr r0, =DlyK str r1, [r0] ldr r0, =SysTim str r1, [r0] ;主循環 main ldr r0, =Flag1 ldr r1, [r0] tst r1, #Bit1 ;SysTick產生0.5s,置位bit 1 beq main ;0.5s標志還沒有置位 ;0.5s標志已經置位 ldr r0, =b_05s ;位帶操作清零0.5s標志 mov r1, #0 str r1, [r0] bl LedFlas mov r0, #'H' bl send_a_charmov r0, #'e' bl send_a_charmov r0, #'l' bl send_a_charmov r0, #'l' bl send_a_charmov r0, #'o' bl send_a_charmov r0, #' ' bl send_a_charmov r0, #'w' bl send_a_charmov r0, #'o' bl send_a_charmov r0, #'r' bl send_a_charmov r0, #'l' bl send_a_charmov r0, #'d' bl send_a_charmov r0, #'\n' bl send_a_charb main;子程序 串口1發送一個字符 send_a_char push {r0 - r3} ldr r2, =USART1_DR str r0, [r2] b1 ldr r2, =USART1_SR ldr r2, [r2] tst r2, #0x40 beq b1 ;發送完成(Transmission complete)等待 pop {r0 - r3} bx lr ;子程序 led閃爍 LedFlas push {r0 - r3} ldr r0, =Flag1 ldr r1, [r0] tst r1, #Bit0 ;bit0 閃爍標志位 beq ONLED ;為0 打開led燈 ;為1 關閉led燈 ldr r0, =b_flas mov r1, #0 str r1, [r0] ;閃爍標志位置為0,下一狀態為打開燈 ;PC.7輸出0 ldr r0, =GPIOC_BRR ldr r1, [r0] orr r1, #Bit7 str r1, [r0] b LedEx ONLED ;為0 打開led燈 ldr r0, =b_flas mov r1, #1 str r1, [r0] ;閃爍標志位置為1,下一狀態為關閉燈 ;PC.7輸出1 ldr r0, =GPIOC_BSRR ldr r1, [r0] orr r1, #Bit7 str r1, [r0] LedEx pop {r0 - r3} bx lr ;異常程序 NMI_Handler bx lr HardFault_Handler bx lr SysTick_Handler ldr r0, =SysTim ldr r1, [r0] add r1, #1 str r1, [r0] cmp r1, #500 bcc TickExit mov r1, #0 str r1, [r0] ldr r0, =b_05s ;大于等于500次 清零時鐘滴答計數器 設置0.5s標志位 ;位帶操作置1 mov r1, #1 str r1, [r0] TickExit bx lr ALIGN ;通過用零或空指令NOP填充,來使當前位置與一個指定的邊界對齊 END

3.編譯

①編譯生成hex文件
勾選hex文件選項
②點擊編譯生成文件

三、電路連接及燒錄

1.串口連接

連接串口
TXD——A10
RXD——A9
3V3——3V3
GND——G

2.燒錄

①注意燒錄時boot0置1,boot1置0
②打開FlyMcu,勾選以下選項
③燒錄成功

四、串口輸出

使用串口調試助手sscom5.13.1
端口號選擇插入的端口
點擊打開串口即可運行成功!

五、總結

使用STM32發送“hello windows”,燒錄的過程與上一個流水燈實驗大同小異,但是這次有STM32的返回文字,收獲頗豐。

參考鏈接

STM32第五章-串口通訊詳解

總結

以上是生活随笔為你收集整理的STM32 汇编程序——串口输出 Hello world的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美女露胸无遮挡 | 久久黄色片视频 | 黄色一级片视频 | 精品在线免费观看 | 97在线观看免费视频 | 日韩不卡高清 | 国产黄色片免费在线观看 | 日本在线观看网站 | 户外少妇对白啪啪野战 | 青青草免费公开视频 | 日产精品久久久久 | 日韩一区二区av | 草草浮力影院 | 老湿机69福利区午夜x片 | 色奇米| 欧美日韩在线第一页 | 欧美乱大交xxxxx潮喷l头像 | 99久久久无码国产精品6 | 九九热在线精品 | 男女av在线| 国产精品一区二区三区久久 | 嫩草影院懂你的影院 | 日本午夜免费福利视频 | 欧美日韩亚洲国产综合 | 久久精工是国产品牌吗 | 老司机福利精品 | 午夜视频网站在线观看 | 欧美色成人 | 亚洲第一中文字幕 | 欧美老肥婆性猛交视频 | 亚洲欧美激情在线观看 | 天天综合影院 | 骚视频在线观看 | 色婷在线| 亚洲一区国产精品 | 九九福利视频 | 国产视频在线看 | 欧美少妇精品 | 亚洲色图在线播放 | 制服丝袜在线播放 | 亚洲一区二区在线免费 | 日韩字幕| 丝袜美腿亚洲综合 | 天天干天天操天天玩 | 爱爱小视频网站 | 久久精品一二三 | www.youjizz.com中国 | 国模无码大尺度一区二区三区 | 欧美日韩在线观看一区二区三区 | 久久久久无码国产精品一区李宗瑞 | 自拍1区 | 成年人免费在线 | 久久久77 | 岛国av不卡 | 久久av无码精品人妻出轨 | 狠狠干狠狠操视频 | 日本午夜在线 | 亚洲一区自拍 | 人人草在线视频 | 欧美日韩看片 | 国产无遮挡裸体免费视频 | 40一50一60老女人毛片 | 欧美日韩亚洲在线观看 | 美女黄视频网站 | 巨物撞击尤物少妇呻吟 | 欧美一级网址 | 91久久精品国产91性色tv | 波多野结衣中文在线 | 国产精品久久久久久久 | 一级做a爱片性色毛片 | 超碰97在线播放 | 日本在线资源 | 一区二区三区在线免费播放 | 国产不卡视频一区二区三区 | a级大片在线观看 | 亚洲巨乳av | 奇米888一区二区三区 | 在线一区二区三区四区 | 国产一区在线观看视频 | 欧美另类日韩 | 国产成人亚洲综合a∨婷婷 台湾a级片 | 国产91一区二区三区在线精品 | v天堂中文在线 | 九九爱精品 | 九色porny自拍视频 | 在线播放黄色av | 日本一二三区在线 | 姐姐的秘密韩剧免费观看全集中文 | 日韩国产欧美一区二区三区 | 一本色道久久综合亚洲精品酒店 | 午夜桃色 | 亚洲av无码片一区二区三区 | 扒开美女内裤狂揉下部 | 亚洲欧美另类综合 | 午夜成人免费视频 | 日韩伦人妻无码 | 日韩一区不卡 | 亚洲第八页 | 婷婷在线网 |