⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.txt

📁 STM32 demo板的例程
💻 TXT
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 902] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o..\obj\uart.o --depend=..\obj\uart.d --device=DARMSTM -I..\..\LAB2 -I..\..\library\src -IC:\Keil\ARM\INC\ST\STM32F10x -DVECT_TAB_RAM --omf_browse=..\obj\uart.crf uart.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  SendChar PROC
;;;105    /* Implementation of putchar (also used by printf function to output data)    */
;;;106    int SendChar (int ch)  {                /* Write character to Serial Port     */
000000  b510              PUSH     {r4,lr}
000002  4604              MOV      r4,r0
;;;107    
;;;108      USART_SendData(USART1, (unsigned char) ch);
000004  b2e1              UXTB     r1,r4
000006  4851              LDR      r0,|L1.332|
000008  f7fff7ff          BL       USART_SendData
;;;109      while (!(USART1->SR & USART_FLAG_TXE));
00000c  bf00              NOP      
                  |L1.14|
00000e  484f              LDR      r0,|L1.332|
000010  8800              LDRH     r0,[r0,#0]
000012  f010f010          TST      r0,#0x80
000016  d0fa              BEQ      |L1.14|
;;;110      return (ch);
000018  4620              MOV      r0,r4
;;;111    }
00001a  bd10              POP      {r4,pc}
                          ENDP

                  _ttywrch PROC
;;;5      extern int  SendChar (int ch);         
;;;6      void _ttywrch (int ch) { SendChar(ch); }
00001c  b510              PUSH     {r4,lr}
00001e  4604              MOV      r4,r0
000020  4620              MOV      r0,r4
000022  f7fff7ff          BL       SendChar
000026  bd10              POP      {r4,pc}
                          ENDP

                  _sys_exit PROC
;;;7      void _sys_exit (int return_code) { for (;;); }
000028  bf00              NOP      
                  |L1.42|
00002a  e7fe              B        |L1.42|
                          ENDP

                  fputc PROC
;;;8      
;;;9      int fputc (int ch, FILE *f) { return (SendChar(ch)); }
00002c  b570              PUSH     {r4-r6,lr}
00002e  4604              MOV      r4,r0
000030  460d              MOV      r5,r1
000032  4620              MOV      r0,r4
000034  f7fff7ff          BL       SendChar
000038  bd70              POP      {r4-r6,pc}
                          ENDP

                  ferror PROC
;;;10     int ferror (FILE *f) {
00003a  4601              MOV      r1,r0
;;;11       /* Your implementation of ferror */
;;;12       return EOF;
00003c  f04ff04f          MOV      r0,#0xffffffff
;;;13     } 
000040  4770              BX       lr
                          ENDP

                  SetupClock PROC
;;;17     void SetupClock (void)
;;;18     {
000042  b510              PUSH     {r4,lr}
;;;19       RCC_DeInit ();                        /* RCC system reset(for debug purpose)*/
000044  f7fff7ff          BL       RCC_DeInit
;;;20       RCC_HSEConfig (RCC_HSE_ON);           /* Enable HSE                         */
000048  f44ff44f          MOV      r0,#0x10000
00004c  f7fff7ff          BL       RCC_HSEConfig
;;;21     
;;;22       /* Wait till HSE is ready                                                   */
;;;23       while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
000050  bf00              NOP      
                  |L1.82|
000052  2031              MOVS     r0,#0x31
000054  f7fff7ff          BL       RCC_GetFlagStatus
000058  2800              CMP      r0,#0
00005a  d0fa              BEQ      |L1.82|
;;;24     
;;;25       RCC_HCLKConfig   (RCC_SYSCLK_Div1);   /* HCLK   = SYSCLK                    */
00005c  2000              MOVS     r0,#0
00005e  f7fff7ff          BL       RCC_HCLKConfig
;;;26       RCC_PCLK2Config  (RCC_HCLK_Div1);     /* PCLK2  = HCLK                      */
000062  2000              MOVS     r0,#0
000064  f7fff7ff          BL       RCC_PCLK2Config
;;;27       RCC_PCLK1Config  (RCC_HCLK_Div2);     /* PCLK1  = HCLK/2                    */
000068  f44ff44f          MOV      r0,#0x400
00006c  f7fff7ff          BL       RCC_PCLK1Config
;;;28       RCC_ADCCLKConfig (RCC_PCLK2_Div4);    /* ADCCLK = PCLK2/4                   */
000070  f44ff44f          MOV      r0,#0x4000
000074  f7fff7ff          BL       RCC_ADCCLKConfig
;;;29     
;;;30       *(vu32 *)0x40022000 = 0x01;           /* Flash 2 wait state                 */
000078  2001              MOVS     r0,#1
00007a  4935              LDR      r1,|L1.336|
00007c  6008              STR      r0,[r1,#0]
;;;31     
;;;32       /* PLLCLK = 8MHz * 9 = 72 MHz                                               */
;;;33       RCC_PLLConfig (RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
00007e  f44ff44f          MOV      r1,#0x1c0000
000082  0400              LSLS     r0,r0,#16
000084  f7fff7ff          BL       RCC_PLLConfig
;;;34     
;;;35       RCC_PLLCmd (ENABLE);                  /* Enable PLL                         */
000088  2001              MOVS     r0,#1
00008a  f7fff7ff          BL       RCC_PLLCmd
;;;36     
;;;37       /* Wait till PLL is ready                                                   */
;;;38       while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
00008e  bf00              NOP      
                  |L1.144|
000090  2039              MOVS     r0,#0x39
000092  f7fff7ff          BL       RCC_GetFlagStatus
000096  2800              CMP      r0,#0
000098  d0fa              BEQ      |L1.144|
;;;39     
;;;40       /* Select PLL as system clock source                                        */
;;;41       RCC_SYSCLKConfig (RCC_SYSCLKSource_PLLCLK);
00009a  2002              MOVS     r0,#2
00009c  f7fff7ff          BL       RCC_SYSCLKConfig
;;;42     
;;;43       /* Wait till PLL is used as system clock source                             */
;;;44       while (RCC_GetSYSCLKSource() != 0x08);
0000a0  bf00              NOP      
                  |L1.162|
0000a2  f7fff7ff          BL       RCC_GetSYSCLKSource
0000a6  2808              CMP      r0,#8
0000a8  d1fb              BNE      |L1.162|
;;;45     
;;;46       /* Enable USART1 and GPIOA clock                                            */
;;;47       RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
0000aa  2101              MOVS     r1,#1
0000ac  f244f244          MOV      r0,#0x4004
0000b0  f7fff7ff          BL       RCC_APB2PeriphClockCmd
;;;48     
;;;49       /* SysTick event each 10 ms with input clock equal to 9MHz (HCLK/8)         */
;;;50       SysTick_SetReload(90000);
0000b4  4827              LDR      r0,|L1.340|
0000b6  f7fff7ff          BL       SysTick_SetReload
;;;51     
;;;52       SysTick_ITConfig(ENABLE);             /* Enable SysTick interrupt           */
0000ba  2001              MOVS     r0,#1
0000bc  f7fff7ff          BL       SysTick_ITConfig
;;;53     }
0000c0  bd10              POP      {r4,pc}
                          ENDP

                  SetupUART PROC
;;;55     
;;;56     void SetupUART (void)  {
0000c2  b500              PUSH     {lr}
0000c4  b087              SUB      sp,sp,#0x1c
;;;57     
;;;58       GPIO_InitTypeDef  GPIO_InitStructure;
;;;59       USART_InitTypeDef USART_InitStructure;
;;;60     
;;;61       /* Enable GPIOA clock                                                       */
;;;62       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
0000c6  2101              MOVS     r1,#1
0000c8  2004              MOVS     r0,#4
0000ca  f7fff7ff          BL       RCC_APB2PeriphClockCmd
;;;63     
;;;64       /* Configure USART1 Rx (PA10) as input floating                             */
;;;65       GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;
0000ce  f44ff44f          MOV      r0,#0x400
0000d2  f8adf8ad          STRH     r0,[sp,#0x18]
;;;66       GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
0000d6  2004              MOVS     r0,#4
0000d8  f88df88d          STRB     r0,[sp,#0x1b]
;;;67       GPIO_Init(GPIOA, &GPIO_InitStructure);
0000dc  a906              ADD      r1,sp,#0x18
0000de  481e              LDR      r0,|L1.344|
0000e0  f7fff7ff          BL       GPIO_Init
;;;68     
;;;69       /* Configure USART1 Tx (PA9) as alternate function push-pull                */
;;;70       GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9;
0000e4  f44ff44f          MOV      r0,#0x200
0000e8  f8adf8ad          STRH     r0,[sp,#0x18]
;;;71       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
0000ec  2003              MOVS     r0,#3
0000ee  f88df88d          STRB     r0,[sp,#0x1a]
;;;72       GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
0000f2  2018              MOVS     r0,#0x18
0000f4  f88df88d          STRB     r0,[sp,#0x1b]
;;;73       GPIO_Init(GPIOA, &GPIO_InitStructure);
0000f8  a906              ADD      r1,sp,#0x18
0000fa  4817              LDR      r0,|L1.344|
0000fc  f7fff7ff          BL       GPIO_Init
;;;74     
;;;75       /* USART1 configured as follow:
;;;76             - BaudRate = 115200 baud  
;;;77             - Word Length = 8 Bits
;;;78             - One Stop Bit
;;;79             - No parity
;;;80             - Hardware flow control disabled (RTS and CTS signals)
;;;81             - Receive and transmit enabled
;;;82             - USART Clock disabled
;;;83             - USART CPOL: Clock is active low
;;;84             - USART CPHA: Data is captured on the middle 
;;;85             - USART LastBit: The clock pulse of the last data bit is not output to 
;;;86                              the SCLK pin
;;;87       */
;;;88       USART_InitStructure.USART_BaudRate            = 115200;
000100  f44ff44f          MOV      r0,#0x1c200
000104  9000              STR      r0,[sp,#0]
;;;89       USART_InitStructure.USART_WordLength          = USART_WordLength_8b;
000106  2000              MOVS     r0,#0
000108  f8adf8ad          STRH     r0,[sp,#4]
;;;90       USART_InitStructure.USART_StopBits            = USART_StopBits_1;
00010c  f8adf8ad          STRH     r0,[sp,#6]
;;;91       USART_InitStructure.USART_Parity              = USART_Parity_No ;
000110  f8adf8ad          STRH     r0,[sp,#8]
;;;92       USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
000114  f8adf8ad          STRH     r0,[sp,#0xa]
;;;93       USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;
000118  200c              MOVS     r0,#0xc
00011a  f8adf8ad          STRH     r0,[sp,#0xc]
;;;94       USART_InitStructure.USART_Clock               = USART_Clock_Disable;
00011e  2000              MOVS     r0,#0
000120  f8adf8ad          STRH     r0,[sp,#0xe]
;;;95       USART_InitStructure.USART_CPOL                = USART_CPOL_Low;
000124  f8adf8ad          STRH     r0,[sp,#0x10]
;;;96       USART_InitStructure.USART_CPHA                = USART_CPHA_2Edge;
000128  f44ff44f          MOV      r0,#0x200
00012c  f8adf8ad          STRH     r0,[sp,#0x12]
;;;97       USART_InitStructure.USART_LastBit             = USART_LastBit_Disable;
000130  2000              MOVS     r0,#0
000132  f8adf8ad          STRH     r0,[sp,#0x14]
;;;98       USART_Init(USART1, &USART_InitStructure);
000136  4669              MOV      r1,sp
000138  4804              LDR      r0,|L1.332|
00013a  f7fff7ff          BL       USART_Init
;;;99     
;;;100      USART_Cmd(USART1, ENABLE); 
00013e  2101              MOVS     r1,#1
000140  4802              LDR      r0,|L1.332|
000142  f7fff7ff          BL       USART_Cmd
;;;101                 /* Enable USART1                      */
;;;102       }
000146  b007              ADD      sp,sp,#0x1c
000148  bd00              POP      {pc}
                          ENDP

00014a  0000              DCW      0x0000
                  |L1.332|
00014c  40013800          DCD      0x40013800
                  |L1.336|
000150  40022000          DCD      0x40022000
                  |L1.340|
000154  00015f90          DCD      0x00015f90
                  |L1.344|
000158  40010800          DCD      0x40010800

                          AREA ||.data||, DATA, ALIGN=0

                  Clock1s
000000  00                DCB      0x00

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -