📄 usart_printf.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\usart_printf.o --depend=.\Obj\usart_printf.d --device=DARMSTM --apcs=interwork -O0 -Otime -I..\..\Libraries\CMSIS\Core\CM3 -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Source\inc -Id:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER ..\..\Source\src\usart_printf.c]
THUMB
AREA ||i.PrintfLogo||, CODE, READONLY, ALIGN=2
PrintfLogo PROC
;;;25 */
;;;26 void PrintfLogo(char *strName, char *strDate)
000000 b570 PUSH {r4-r6,lr}
;;;27 {
000002 4604 MOV r4,r0
000004 460d MOV r5,r1
;;;28 printf("*************************************************************\n\r");
000006 a00f ADR r0,|L1.68|
000008 f7fffffe BL __2printf
;;;29 printf("* Example Name : %s\r\n", strName);
00000c 4621 MOV r1,r4
00000e a01d ADR r0,|L1.132|
000010 f7fffffe BL __2printf
;;;30 printf("* Update Date : %s\r\n", strDate);
000014 4629 MOV r1,r5
000016 a021 ADR r0,|L1.156|
000018 f7fffffe BL __2printf
;;;31 printf("* StdPeriph_Lib Version : V3.1.2\n\r");
00001c a025 ADR r0,|L1.180|
00001e f7fffffe BL __2printf
;;;32 printf("* \n\r");
000022 a02d ADR r0,|L1.216|
000024 f7fffffe BL __2printf
;;;33 printf("* Copyright www.armfly.com \r\n");
000028 a02d ADR r0,|L1.224|
00002a f7fffffe BL __2printf
;;;34 printf("* QQ : 1295744630 \r\n");
00002e a034 ADR r0,|L1.256|
000030 f7fffffe BL __2printf
;;;35 printf("* Email : armfly@qq.com \r\n");
000034 a038 ADR r0,|L1.280|
000036 f7fffffe BL __2printf
;;;36 printf("*************************************************************\n\r");
00003a a002 ADR r0,|L1.68|
00003c f7fffffe BL __2printf
;;;37 }
000040 bd70 POP {r4-r6,pc}
;;;38
ENDP
000042 0000 DCW 0x0000
|L1.68|
000044 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a DCB "*******************************************************"
00007b 2a2a2a2a2a2a0a0d00 DCB "******\n\r",0
|L1.132|
000084 2a204578616d706c65204e616d65203a2025730d0a00 DCB "* Example Name : %s\r\n",0
00009a 00 DCB 0
00009b 00 DCB 0
|L1.156|
00009c 2a20557064617465204461746520203a2025730d0a00 DCB "* Update Date : %s\r\n",0
0000b2 00 DCB 0
0000b3 00 DCB 0
|L1.180|
0000b4 2a205374645065726970685f4c69622056657273696f6e203a2056332e312e320a0d00 DCB "* StdPeriph_Lib Version : V3.1.2\n\r",0
0000d7 00 DCB 0
|L1.216|
0000d8 2a200a0d00 DCB "* \n\r",0
0000dd 00 DCB 0
0000de 00 DCB 0
0000df 00 DCB 0
|L1.224|
0000e0 2a20436f70797269676874207777772e61726d666c792e636f6d200d0a00 DCB "* Copyright www.armfly.com \r\n",0
0000fe 00 DCB 0
0000ff 00 DCB 0
|L1.256|
000100 2a205151202020203a2031323935373434363330200d0a00 DCB "* QQ : 1295744630 \r\n",0
|L1.280|
000118 2a20456d61696c203a2061726d666c794071712e636f6d200d0a00 DCB "* Email : armfly@qq.com \r\n",0
000133 00 DCB 0
AREA ||i.USART_Configuration||, CODE, READONLY, ALIGN=2
USART_Configuration PROC
;;;50 */
;;;51 void USART_Configuration(void)
000000 b500 PUSH {lr}
;;;52 {
000002 b085 SUB sp,sp,#0x14
;;;53 GPIO_InitTypeDef GPIO_InitStructure;
;;;54 USART_InitTypeDef USART_InitStructure;
;;;55
;;;56 /* 第1步:打开GPIO和USART部件的时钟 */
;;;57 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
000004 2101 MOVS r1,#1
000006 2005 MOVS r0,#5
000008 f7fffffe BL RCC_APB2PeriphClockCmd
;;;58 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
00000c 2101 MOVS r1,#1
00000e 0388 LSLS r0,r1,#14
000010 f7fffffe BL RCC_APB2PeriphClockCmd
;;;59
;;;60 /* 第2步:将USART Tx的GPIO配置为推挽复用模式 */
;;;61 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
000014 f44f7000 MOV r0,#0x200
000018 f8ad0010 STRH r0,[sp,#0x10]
;;;62 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
00001c 2018 MOVS r0,#0x18
00001e f88d0013 STRB r0,[sp,#0x13]
;;;63 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000022 2003 MOVS r0,#3
000024 f88d0012 STRB r0,[sp,#0x12]
;;;64 GPIO_Init(GPIOA, &GPIO_InitStructure);
000028 a904 ADD r1,sp,#0x10
00002a 4817 LDR r0,|L2.136|
00002c f7fffffe BL GPIO_Init
;;;65
;;;66 /* 第3步:将USART Rx的GPIO配置为浮空输入模式
;;;67 由于CPU复位后,GPIO缺省都是浮空输入模式,因此下面这个步骤不是必须的
;;;68 但是,我还是建议加上便于阅读,并且防止其它地方修改了这个口线的设置参数
;;;69 */
;;;70 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
000030 f44f6080 MOV r0,#0x400
000034 f8ad0010 STRH r0,[sp,#0x10]
;;;71 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
000038 2004 MOVS r0,#4
00003a f88d0013 STRB r0,[sp,#0x13]
;;;72 GPIO_Init(GPIOA, &GPIO_InitStructure);
00003e a904 ADD r1,sp,#0x10
000040 4811 LDR r0,|L2.136|
000042 f7fffffe BL GPIO_Init
;;;73 /* 第3步已经做了,因此这步可以不做
;;;74 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
;;;75 */
;;;76 GPIO_Init(GPIOA, &GPIO_InitStructure);
000046 a904 ADD r1,sp,#0x10
000048 480f LDR r0,|L2.136|
00004a f7fffffe BL GPIO_Init
;;;77
;;;78
;;;79 /* 第4步:配置USART参数
;;;80 - BaudRate = 115200 baud
;;;81 - Word Length = 8 Bits
;;;82 - One Stop Bit
;;;83 - No parity
;;;84 - Hardware flow control disabled (RTS and CTS signals)
;;;85 - Receive and transmit enabled
;;;86 */
;;;87 USART_InitStructure.USART_BaudRate = 115200;
00004e f44f30e1 MOV r0,#0x1c200
000052 9000 STR r0,[sp,#0]
;;;88 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
000054 2000 MOVS r0,#0
000056 f8ad0004 STRH r0,[sp,#4]
;;;89 USART_InitStructure.USART_StopBits = USART_StopBits_1;
00005a f8ad0006 STRH r0,[sp,#6]
;;;90 USART_InitStructure.USART_Parity = USART_Parity_No;
00005e f8ad0008 STRH r0,[sp,#8]
;;;91 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
000062 f8ad000c STRH r0,[sp,#0xc]
;;;92 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
000066 200c MOVS r0,#0xc
000068 f8ad000a STRH r0,[sp,#0xa]
;;;93 USART_Init(USART1, &USART_InitStructure);
00006c 4669 MOV r1,sp
00006e 4807 LDR r0,|L2.140|
000070 f7fffffe BL USART_Init
;;;94
;;;95 /* 第5步:使能 USART, 配置完毕 */
;;;96 USART_Cmd(USART1, ENABLE);
000074 2101 MOVS r1,#1
000076 4805 LDR r0,|L2.140|
000078 f7fffffe BL USART_Cmd
;;;97
;;;98 /* CPU的小缺陷:串口配置好,如果直接Send,则第1个字节发送不出去
;;;99 如下语句解决第1个字节无法正确发送出去的问题 */
;;;100 USART_ClearFlag(USART1, USART_FLAG_TC); /* 清发送外城标志,Transmission Complete flag */
00007c 2140 MOVS r1,#0x40
00007e 4803 LDR r0,|L2.140|
000080 f7fffffe BL USART_ClearFlag
;;;101 }
000084 b005 ADD sp,sp,#0x14
000086 bd00 POP {pc}
;;;102
ENDP
|L2.136|
DCD 0x40010800
|L2.140|
DCD 0x40013800
AREA ||i.fgetc||, CODE, READONLY, ALIGN=2
fgetc PROC
;;;129 */
;;;130 int fgetc(FILE *f)
000000 b510 PUSH {r4,lr}
;;;131 {
000002 4604 MOV r4,r0
;;;132 /* 等待串口1输入数据 */
;;;133 while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
000004 bf00 NOP
|L3.6|
000006 2120 MOVS r1,#0x20
000008 4804 LDR r0,|L3.28|
00000a f7fffffe BL USART_GetFlagStatus
00000e 2800 CMP r0,#0
000010 d0f9 BEQ |L3.6|
;;;134 {}
;;;135
;;;136 return (int)USART_ReceiveData(USART1);
000012 4802 LDR r0,|L3.28|
000014 f7fffffe BL USART_ReceiveData
;;;137 }
000018 bd10 POP {r4,pc}
;;;138
ENDP
00001a 0000 DCW 0x0000
|L3.28|
DCD 0x40013800
AREA ||i.fputc||, CODE, READONLY, ALIGN=2
fputc PROC
;;;109 */
;;;110 int fputc(int ch, FILE *f)
000000 b570 PUSH {r4-r6,lr}
;;;111 {
000002 4604 MOV r4,r0
000004 460d MOV r5,r1
;;;112 /* Place your implementation of fputc here */
;;;113 /* e.g. write a character to the USART */
;;;114 USART_SendData(USART1, (uint8_t) ch);
000006 b2e1 UXTB r1,r4
000008 4805 LDR r0,|L4.32|
00000a f7fffffe BL USART_SendData
;;;115
;;;116 /* Loop until the end of transmission */
;;;117 while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
00000e bf00 NOP
|L4.16|
000010 2140 MOVS r1,#0x40
000012 4803 LDR r0,|L4.32|
000014 f7fffffe BL USART_GetFlagStatus
000018 2800 CMP r0,#0
00001a d0f9 BEQ |L4.16|
;;;118 {}
;;;119
;;;120 return ch;
00001c 4620 MOV r0,r4
;;;121 }
00001e bd70 POP {r4-r6,pc}
;;;122
ENDP
|L4.32|
DCD 0x40013800
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -