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

📄 main.txt

📁 STM32的SPI例程
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 938] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\output\main.o --depend=.\output\main.d --device=DARMSTM --apcs=interwork -O3 -I.\ -ID:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\output\main.crf main.c]
                          THUMB

                          AREA ||i.Buffercmp||, CODE, READONLY, ALIGN=1

                  Buffercmp PROC
000000  b510              PUSH     {r4,lr}
000002  e007              B        |L1.20|
                  |L1.4|
000004  7803              LDRB     r3,[r0,#0]
000006  780c              LDRB     r4,[r1,#0]
000008  42a3              CMP      r3,r4
00000a  d001              BEQ      |L1.16|
00000c  2000              MOVS     r0,#0
00000e  bd10              POP      {r4,pc}
                  |L1.16|
000010  1c40              ADDS     r0,r0,#1
000012  1c49              ADDS     r1,r1,#1
                  |L1.20|
000014  0013              MOVS     r3,r2
000016  f1a20201          SUB      r2,r2,#1
00001a  b292              UXTH     r2,r2
00001c  d1f2              BNE      |L1.4|
00001e  2001              MOVS     r0,#1
000020  bd10              POP      {r4,pc}
                          ENDP


                          AREA ||i.GPIO_Configuration||, CODE, READONLY, ALIGN=2

                  GPIO_Configuration PROC
;;;232    void GPIO_Configuration(void)
;;;233    {
000000  b538              PUSH     {r3-r5,lr}
;;;234      GPIO_InitTypeDef GPIO_InitStructure;
;;;235    
;;;236      /* Configure SPI1 pins: SCK, MISO and MOSI ---------------------------------*/
;;;237      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
000002  20e0              MOVS     r0,#0xe0
000004  f8ad0000          STRH     r0,[sp,#0]
;;;238      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000008  2403              MOVS     r4,#3
00000a  f88d4002          STRB     r4,[sp,#2]
;;;239      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
00000e  2018              MOVS     r0,#0x18
000010  f88d0003          STRB     r0,[sp,#3]
;;;240      GPIO_Init(GPIOA, &GPIO_InitStructure);
000014  4669              MOV      r1,sp
000016  480d              LDR      r0,|L2.76|
000018  f7fffffe          BL       GPIO_Init
;;;241    
;;;242      /* Configure SPI2 pins: SCK, MISO and MOSI ---------------------------------*/
;;;243      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
00001c  f44f4060          MOV      r0,#0xe000
;;;244      GPIO_Init(GPIOC, &GPIO_InitStructure);
000020  4d0b              LDR      r5,|L2.80|
000022  f8ad0000          STRH     r0,[sp,#0]            ;243
000026  4669              MOV      r1,sp
000028  4628              MOV      r0,r5
00002a  f7fffffe          BL       GPIO_Init
;;;245    
;;;246      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_6 | GPIO_Pin_7;
00002e  f44f7070          MOV      r0,#0x3c0
000032  f8ad0000          STRH     r0,[sp,#0]
;;;247      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000036  f88d4002          STRB     r4,[sp,#2]
;;;248      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
00003a  2010              MOVS     r0,#0x10
00003c  f88d0003          STRB     r0,[sp,#3]
;;;249      GPIO_Init(GPIOC, &GPIO_InitStructure);
000040  4669              MOV      r1,sp
000042  4628              MOV      r0,r5
000044  f7fffffe          BL       GPIO_Init
;;;250    }
000048  bd38              POP      {r3-r5,pc}
;;;251    
                          ENDP

00004a  0000              DCW      0x0000
                  |L2.76|
00004c  40010800          DCD      0x40010800
                  |L2.80|
000050  40011000          DCD      0x40011000

                          AREA ||i.NVIC_Configuration||, CODE, READONLY, ALIGN=1

                  NVIC_Configuration PROC
000000  2100              MOVS     r1,#0
000002  f04f6000          MOV      r0,#0x8000000
000006  f7ffbffe          B.W      NVIC_SetVectorTable
                          ENDP


                          AREA ||i.RCC_Configuration||, CODE, READONLY, ALIGN=2

                  RCC_Configuration PROC
;;;170    void RCC_Configuration(void)
;;;171    {
000000  b570              PUSH     {r4-r6,lr}
;;;172      /* RCC system reset(for debug purpose) */
;;;173      RCC_DeInit();
000002  f7fffffe          BL       RCC_DeInit
;;;174    
;;;175      /* Enable HSE */
;;;176      RCC_HSEConfig(RCC_HSE_ON);
000006  f44f3580          MOV      r5,#0x10000
00000a  4628              MOV      r0,r5
00000c  f7fffffe          BL       RCC_HSEConfig
;;;177    
;;;178      /* Wait till HSE is ready */
;;;179      HSEStartUpStatus = RCC_WaitForHSEStartUp();
000010  f7fffffe          BL       RCC_WaitForHSEStartUp
000014  491a              LDR      r1,|L4.128|
000016  71c8              STRB     r0,[r1,#7]  ; HSEStartUpStatus
;;;180    
;;;181      if(HSEStartUpStatus == SUCCESS)
000018  b2c0              UXTB     r0,r0
00001a  2801              CMP      r0,#1
00001c  d124              BNE      |L4.104|
;;;182      {
;;;183        /* HCLK = SYSCLK */
;;;184        RCC_HCLKConfig(RCC_SYSCLK_Div1); 
00001e  2000              MOVS     r0,#0
000020  f7fffffe          BL       RCC_HCLKConfig
;;;185      
;;;186        /* PCLK2 = HCLK/2 */
;;;187        RCC_PCLK2Config(RCC_HCLK_Div2); 
000024  11ac              ASRS     r4,r5,#6
000026  4620              MOV      r0,r4
000028  f7fffffe          BL       RCC_PCLK2Config
;;;188    
;;;189        /* PCLK1 = HCLK/2 */
;;;190        RCC_PCLK1Config(RCC_HCLK_Div2);
00002c  4620              MOV      r0,r4
00002e  f7fffffe          BL       RCC_PCLK1Config
;;;191     
;;;192        /* Flash 2 wait state */
;;;193        FLASH_SetLatency(FLASH_Latency_2);
000032  2002              MOVS     r0,#2
000034  f7fffffe          BL       FLASH_SetLatency
;;;194        /* Enable Prefetch Buffer */
;;;195        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
000038  2010              MOVS     r0,#0x10
00003a  f7fffffe          BL       FLASH_PrefetchBufferCmd
;;;196    
;;;197        /* PLLCLK = 8MHz * 9 = 72 MHz */
;;;198        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
00003e  f44f11e0          MOV      r1,#0x1c0000
000042  4628              MOV      r0,r5
000044  f7fffffe          BL       RCC_PLLConfig
;;;199    
;;;200        /* Enable PLL */ 
;;;201        RCC_PLLCmd(ENABLE);
000048  2001              MOVS     r0,#1
00004a  f7fffffe          BL       RCC_PLLCmd
                  |L4.78|
;;;202    
;;;203        /* Wait till PLL is ready */
;;;204        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
00004e  2039              MOVS     r0,#0x39
000050  f7fffffe          BL       RCC_GetFlagStatus
000054  2800              CMP      r0,#0
000056  d0fa              BEQ      |L4.78|
;;;205        {
;;;206        }
;;;207    
;;;208        /* Select PLL as system clock source */
;;;209        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
000058  2002              MOVS     r0,#2
00005a  f7fffffe          BL       RCC_SYSCLKConfig
;;;210    
;;;211        /* Wait till PLL is used as system clock source */
;;;212        while(RCC_GetSYSCLKSource() != 0x08)
00005e  bf00              NOP      
                  |L4.96|
000060  f7fffffe          BL       RCC_GetSYSCLKSource
000064  2808              CMP      r0,#8
000066  d1fb              BNE      |L4.96|
                  |L4.104|
;;;213        {
;;;214        }
;;;215      }
;;;216    
;;;217    /* Enable peripheral clocks --------------------------------------------------*/
;;;218      /* GPIOA, GPIOC and SPI1 clock enable */
;;;219      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC |
000068  2101              MOVS     r1,#1
00006a  f2410014          MOV      r0,#0x1014
00006e  f7fffffe          BL       RCC_APB2PeriphClockCmd
;;;220                             RCC_APB2Periph_SPI1, ENABLE);
;;;221      /* SPI2 Periph clock enable */
;;;222      RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
000072  e8bd4070          POP      {r4-r6,lr}
000076  2101              MOVS     r1,#1
000078  0388              LSLS     r0,r1,#14
00007a  f7ffbffe          B.W      RCC_APB1PeriphClockCmd
;;;223    }
;;;224    
                          ENDP

00007e  0000              DCW      0x0000
                  |L4.128|
000080  00000000          DCD      ||.data||

                          AREA ||i.main||, CODE, READONLY, ALIGN=2

                  main PROC
;;;48     int main(void)
;;;49     {
000000  e92d5ff0          PUSH     {r4-r12,lr}
;;;50     #ifdef DEBUG
;;;51       debug();
;;;52     #endif
;;;53     
;;;54       /* System clocks configuration ---------------------------------------------*/
;;;55       RCC_Configuration();
000004  f7fffffe          BL       RCC_Configuration
;;;56     
;;;57       /* NVIC configuration ------------------------------------------------------*/
;;;58       NVIC_Configuration();
000008  f7fffffe          BL       NVIC_Configuration
;;;59     
;;;60       /* GPIO configuration ------------------------------------------------------*/
;;;61       GPIO_Configuration();
00000c  f7fffffe          BL       GPIO_Configuration
;;;62     
;;;63       /* 1st phase: SPI1 Master and SPI2 Slave */
;;;64       /* SPI1 Config -------------------------------------------------------------*/
;;;65       SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
000010  4c77              LDR      r4,|L5.496|
000012  f04f0b00          MOV      r11,#0
000016  f8a4b000          STRH     r11,[r4,#0]  ; SPI_InitStructure
;;;66       SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
00001a  f44f7082          MOV      r0,#0x104
00001e  8060              STRH     r0,[r4,#2]  ; SPI_InitStructure
;;;67       SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
000020  f8a4b004          STRH     r11,[r4,#4]  ; SPI_InitStructure
;;;68       SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
000024  f8a4b006          STRH     r11,[r4,#6]  ; SPI_InitStructure
;;;69       SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
000028  2001              MOVS     r0,#1
00002a  8120              STRH     r0,[r4,#8]  ; SPI_InitStructure
;;;70       SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
00002c  0240              LSLS     r0,r0,#9
00002e  8160              STRH     r0,[r4,#0xa]  ; SPI_InitStructure
;;;71       SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
000030  2008              MOVS     r0,#8
000032  81a0              STRH     r0,[r4,#0xc]  ; SPI_InitStructure
;;;72       SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
000034  2080              MOVS     r0,#0x80
000036  81e0              STRH     r0,[r4,#0xe]  ; SPI_InitStructure
;;;73       SPI_InitStructure.SPI_CRCPolynomial = 7;
000038  2007              MOVS     r0,#7
;;;74       SPI_Init(SPI1, &SPI_InitStructure);
00003a  4e6e              LDR      r6,|L5.500|
00003c  8220              STRH     r0,[r4,#0x10]         ;73  ; SPI_InitStructure
00003e  4621              MOV      r1,r4
000040  4630              MOV      r0,r6
000042  f7fffffe          BL       SPI_Init
;;;75     
;;;76       /* SPI2 Config -------------------------------------------------------------*/
;;;77       SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
;;;78       SPI_Init(SPI2, &SPI_InitStructure);
000046  4d6c              LDR      r5,|L5.504|
000048  f8a4b002          STRH     r11,[r4,#2]           ;77  ; SPI_InitStructure
00004c  4621              MOV      r1,r4
00004e  4628              MOV      r0,r5
000050  f7fffffe          BL       SPI_Init
;;;79     
;;;80       /* Enable SPI1 */
;;;81       SPI_Cmd(SPI1, ENABLE);
000054  2101              MOVS     r1,#1
000056  4630              MOV      r0,r6
000058  f7fffffe          BL       SPI_Cmd
;;;82       /* Enable SPI2 */
;;;83       SPI_Cmd(SPI2, ENABLE);
00005c  2101              MOVS     r1,#1
00005e  4628              MOV      r0,r5
000060  f7fffffe          BL       SPI_Cmd
000064  4f65              LDR      r7,|L5.508|
000066  f1040912          ADD      r9,r4,#0x12
00006a  f1040a32          ADD      r10,r4,#0x32
00006e  f1a70820          SUB      r8,r7,#0x20
000072  f1a70428          SUB      r4,r7,#0x28
;;;84     
;;;85       /* Transfer procedure */
;;;86       while(Tx_Idx<BufferSize)
000076  e02c              B        |L5.210|
                  |L5.120|
;;;87       { 
;;;88         /* Wait for SPI1 Tx buffer empty */ 
;;;89         while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)==RESET);

⌨️ 快捷键说明

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