日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 麻豆影视免费观看 | 亚洲图片欧美日韩 | 污视频在线观看网站 | 狠狠狠狠狠狠狠干 | 少妇诱惑av| 成人av免费观看 | japansexxxxhd医生| 色呦呦呦呦 | 精品精品视频 | 一级片手机在线观看 | 日韩精品一区二区三区丰满 | 在哪里可以看黄色片 | 色网站在线免费观看 | 玖玖精品在线视频 | 国产乱淫av一区二区三区 | 日韩免费淫片 | 亚洲av高清一区二区三区 | 三级国产视频 | 五月天激情国产综合婷婷婷 | 黄视频网站免费看 | 老司机在线看片 | 亚洲欧美另类图片 | 无套日出白浆 | 人人人爽 | 国产熟妇一区二区三区四区 | 极品尤物一区二区三区 | 中文字幕欧美另类精品亚洲 | 一级黄色美女视频 | 91看片免费版 | 午夜免费小视频 | 影音先锋啪啪资源 | 亚洲涩涩在线 | 成人五区 | 国产午夜免费视频 | 97超碰免费在线 | 欧美日韩999 | 中国久久久久 | 日韩素人| 人妖av在线 | 一级影片在线观看 | 欧美成人视 | 亚洲六月丁香色婷婷综合久久 | 日日日日操 | 久久久久久免费毛片精品 | 夜夜撸av| 午夜精品久久久久久久无码 | 欧美美女黄色 | 亚洲精品一区二区三区新线路 | 欧美一级大黄 | 精品一区二区久久久 | 人人天天夜夜 | 少妇人妻偷人精品视频蜜桃 | 美女污软件 | 天天躁日日躁狠狠躁av麻豆 | 亚洲精品午夜精品 | 一本加勒比北条麻妃 | 一级特黄aaa| 中文字幕日韩精品一区 | 成人mv在线观看 | 成人夜色 | 国产极品美女高潮无套嗷嗷叫酒店 | 99久久黄色 | 无套内谢大学处破女www小说 | 男女网站视频 | 一本色道久久综合精品婷婷 | 日韩天堂在线观看 | 成人污污www网站免费丝瓜 | 久久亚洲综合国产精品99麻豆精品福利 | 中文久久精品 | 黑人多p混交群体交乱 | 国产日本一区二区三区 | 国产一二三视频 | 亚洲乱码在线 | 天天干天天色天天 | 久久94 | 成年人免费在线观看网站 | 女人叫床高潮娇喘声录音mp3 | 在线免费观看av的网站 | 日韩欧美黄色 | 啪啪福利视频 | a天堂在线观看视频 | 男生女生羞羞网站 | 精品国产高清在线观看 | 国产 日韩 欧美 综合 | 人人爽久久涩噜噜噜网站 | 69国产视频 | 一区二区三区四区免费视频 | 日本久草视频 | 97人妻人人揉人人躁人人 | 91久久亚洲 | 日韩在线不卡视频 | 一区二区黄色 | 美景之屋电影免费高清完整韩剧 | 色乱码一区二区三区熟女 | 欧美日韩国产免费观看 | 日韩国产传媒 | 黄免费在线观看 | 蜜臀网在线 | 大奶一区二区 |