📄 bsp_usart.txt
字号:
; generated by ARM C/C++ Compiler, 4.1 [Build 561]
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Flash\Obj\bsp_usart.o --depend=.\Flash\Obj\bsp_usart.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=870 -I..\..\Libraries\CMSIS\CM3\CoreSupport -I..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\User\bsp -I..\..\User\fatfs -I..\..\User -IC:\Keil\ARM\INC -IC:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER ..\..\User\bsp\bsp_usart.c]
THUMB
AREA ||i.bsp_InitUart||, CODE, READONLY, ALIGN=2
bsp_InitUart PROC
;;;32 */
;;;33 void bsp_InitUart(void)
000000 b500 PUSH {lr}
;;;34 {
000002 b085 SUB sp,sp,#0x14
;;;35 GPIO_InitTypeDef GPIO_InitStructure;
;;;36 USART_InitTypeDef USART_InitStructure;
;;;37
;;;38 /* 第1步:打开GPIO和USART部件的时钟 */
;;;39 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
000004 2101 MOVS r1,#1
000006 2005 MOVS r0,#5
000008 f7fffffe BL RCC_APB2PeriphClockCmd
;;;40 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
00000c 2101 MOVS r1,#1
00000e 0388 LSLS r0,r1,#14
000010 f7fffffe BL RCC_APB2PeriphClockCmd
;;;41
;;;42 /* 第2步:将USART Tx的GPIO配置为推挽复用模式 */
;;;43 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
000014 f44f7000 MOV r0,#0x200
000018 f8ad0010 STRH r0,[sp,#0x10]
;;;44 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
00001c 2018 MOVS r0,#0x18
00001e f88d0013 STRB r0,[sp,#0x13]
;;;45 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000022 2003 MOVS r0,#3
000024 f88d0012 STRB r0,[sp,#0x12]
;;;46 GPIO_Init(GPIOA, &GPIO_InitStructure);
000028 a904 ADD r1,sp,#0x10
00002a 4817 LDR r0,|L1.136|
00002c f7fffffe BL GPIO_Init
;;;47
;;;48 /* 第3步:将USART Rx的GPIO配置为浮空输入模式
;;;49 由于CPU复位后,GPIO缺省都是浮空输入模式,因此下面这个步骤不是必须的
;;;50 但是,我还是建议加上便于阅读,并且防止其它地方修改了这个口线的设置参数
;;;51 */
;;;52 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
000030 f44f6080 MOV r0,#0x400
000034 f8ad0010 STRH r0,[sp,#0x10]
;;;53 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
000038 2004 MOVS r0,#4
00003a f88d0013 STRB r0,[sp,#0x13]
;;;54 GPIO_Init(GPIOA, &GPIO_InitStructure);
00003e a904 ADD r1,sp,#0x10
000040 4811 LDR r0,|L1.136|
000042 f7fffffe BL GPIO_Init
;;;55 /* 第3步已经做了,因此这步可以不做
;;;56 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
;;;57 */
;;;58 GPIO_Init(GPIOA, &GPIO_InitStructure);
000046 a904 ADD r1,sp,#0x10
000048 480f LDR r0,|L1.136|
00004a f7fffffe BL GPIO_Init
;;;59
;;;60
;;;61 /* 第4步:配置USART参数
;;;62 - 波特率 = 115200 baud
;;;63 - 数据长度 = 8 Bits
;;;64 - 1个停止位
;;;65 - 无校验
;;;66 - 禁止硬件流控(即禁止RTS和CTS)
;;;67 - 使能接收和发送
;;;68 */
;;;69 USART_InitStructure.USART_BaudRate = 115200;
00004e f44f30e1 MOV r0,#0x1c200
000052 9000 STR r0,[sp,#0]
;;;70 USART_InitStructure.USART_WordLength = USART_WordLength_8b;
000054 2000 MOVS r0,#0
000056 f8ad0004 STRH r0,[sp,#4]
;;;71 USART_InitStructure.USART_StopBits = USART_StopBits_1;
00005a f8ad0006 STRH r0,[sp,#6]
;;;72 USART_InitStructure.USART_Parity = USART_Parity_No;
00005e f8ad0008 STRH r0,[sp,#8]
;;;73 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
000062 f8ad000c STRH r0,[sp,#0xc]
;;;74 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
000066 200c MOVS r0,#0xc
000068 f8ad000a STRH r0,[sp,#0xa]
;;;75 USART_Init(USART1, &USART_InitStructure);
00006c 4669 MOV r1,sp
00006e 4807 LDR r0,|L1.140|
000070 f7fffffe BL USART_Init
;;;76
;;;77 /* 第5步:使能 USART, 配置完毕 */
;;;78 USART_Cmd(USART1, ENABLE);
000074 2101 MOVS r1,#1
000076 4805 LDR r0,|L1.140|
000078 f7fffffe BL USART_Cmd
;;;79
;;;80 /*
;;;81 CPU的小缺陷:串口配置好,如果直接Send,则第1个字节发送不出去
;;;82 如下语句解决第1个字节无法正确发送出去的问题:
;;;83 清发送完成标志,Transmission Complete flag
;;;84 */
;;;85 USART_ClearFlag(USART1, USART_FLAG_TC);
00007c 2140 MOVS r1,#0x40
00007e 4803 LDR r0,|L1.140|
000080 f7fffffe BL USART_ClearFlag
;;;86 }
000084 b005 ADD sp,sp,#0x14
000086 bd00 POP {pc}
;;;87
ENDP
|L1.136|
DCD 0x40010800
|L1.140|
DCD 0x40013800
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -