Files
new_f_3/Project/MDK-ARM/Flash/List/main.txt
刘正航 609eb878d1 New
2026-04-16 16:55:01 +08:00

1674 lines
63 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
; generated by Component: ARM Compiler 5.06 update 7 (build 960) Tool: ArmCC [4d365d]
; commandline ArmCC [--list --split_sections --debug -c --asm --interleave -o.\flash\obj\main.o --asm_dir=.\Flash\List\ --list_dir=.\Flash\List\ --depend=.\flash\obj\main.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=9931,870 -I..\..\Libraries\CMSIS\Device\ST\STM32F10x\Include -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Libraries\STM32_USB-FS-Device_Driver\inc -I..\..\Libraries\CMSIS\Include -I..\..\User\bsp -I..\..\User\bsp\inc -I..\..\User\app\inc -I..\..\User -IC:\Users\w1619\AppData\Local\Arm\Packs\Keil\STM32F1xx_DFP\2.4.1\Device\Include -D__MICROLIB -D__UVISION_VERSION=538 -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DSTM32F10X_HD --omf_browse=.\flash\obj\main.crf ..\..\User\app\src\main.c]
THUMB
AREA ||i.Adc_Init||, CODE, READONLY, ALIGN=2
Adc_Init PROC
;;;53 // 我们默认将开启通道0~3
;;;54 void Adc_Init(void)
000000 b500 PUSH {lr}
;;;55 {
000002 b087 SUB sp,sp,#0x1c
;;;56 ADC_InitTypeDef ADC_InitStructure;
;;;57 GPIO_InitTypeDef GPIO_InitStructure;
;;;58
;;;59 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE); // 使能ADC1通道时钟
000004 2101 MOVS r1,#1
000006 f44f7001 MOV r0,#0x204
00000a f7fffffe BL RCC_APB2PeriphClockCmd
;;;60
;;;61 RCC_ADCCLKConfig(RCC_PCLK2_Div6); // 设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
00000e f44f4000 MOV r0,#0x8000
000012 f7fffffe BL RCC_ADCCLKConfig
;;;62
;;;63 // PA1 作为模拟通道输入引脚
;;;64 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
000016 2006 MOVS r0,#6
000018 f8ad0004 STRH r0,[sp,#4]
;;;65 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // 模拟输入引脚
00001c 2000 MOVS r0,#0
00001e f88d0007 STRB r0,[sp,#7]
;;;66 GPIO_Init(GPIOA, &GPIO_InitStructure);
000022 a901 ADD r1,sp,#4
000024 4817 LDR r0,|L1.132|
000026 f7fffffe BL GPIO_Init
;;;67
;;;68 ADC_DeInit(ADC1); // 复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值
00002a 4817 LDR r0,|L1.136|
00002c f7fffffe BL ADC_DeInit
;;;69
;;;70 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // ADC工作模式:ADC1和ADC2工作在独立模式
000030 2000 MOVS r0,#0
000032 9002 STR r0,[sp,#8]
;;;71 ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 模数转换工作在单通道模式
000034 f88d000c STRB r0,[sp,#0xc]
;;;72 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 模数转换工作在单次转换模式
000038 f88d000d STRB r0,[sp,#0xd]
;;;73 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 转换由软件而不是外部触发启动
00003c f44f2060 MOV r0,#0xe0000
000040 9004 STR r0,[sp,#0x10]
;;;74 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // ADC数据右对齐
000042 2000 MOVS r0,#0
000044 9005 STR r0,[sp,#0x14]
;;;75 ADC_InitStructure.ADC_NbrOfChannel = 1; // 顺序进行规则转换的ADC通道的数目
000046 2001 MOVS r0,#1
000048 f88d0018 STRB r0,[sp,#0x18]
;;;76 ADC_Init(ADC1, &ADC_InitStructure); // 根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
00004c a902 ADD r1,sp,#8
00004e 480e LDR r0,|L1.136|
000050 f7fffffe BL ADC_Init
;;;77
;;;78 ADC_Cmd(ADC1, ENABLE); // 使能指定的ADC1
000054 2101 MOVS r1,#1
000056 480c LDR r0,|L1.136|
000058 f7fffffe BL ADC_Cmd
;;;79
;;;80 ADC_ResetCalibration(ADC1); // 使能复位校准
00005c 480a LDR r0,|L1.136|
00005e f7fffffe BL ADC_ResetCalibration
;;;81
;;;82 while (ADC_GetResetCalibrationStatus(ADC1))
000062 bf00 NOP
|L1.100|
000064 4808 LDR r0,|L1.136|
000066 f7fffffe BL ADC_GetResetCalibrationStatus
00006a 2800 CMP r0,#0
00006c d1fa BNE |L1.100|
;;;83 ; // 等待复位校准结束
;;;84
;;;85 ADC_StartCalibration(ADC1); // 开启AD校准
00006e 4806 LDR r0,|L1.136|
000070 f7fffffe BL ADC_StartCalibration
;;;86
;;;87 while (ADC_GetCalibrationStatus(ADC1))
000074 bf00 NOP
|L1.118|
000076 4804 LDR r0,|L1.136|
000078 f7fffffe BL ADC_GetCalibrationStatus
00007c 2800 CMP r0,#0
00007e d1fa BNE |L1.118|
;;;88 ; // 等待校准结束
;;;89
;;;90 // ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
;;;91 }
000080 b007 ADD sp,sp,#0x1c
000082 bd00 POP {pc}
;;;92 // 获得ADC值
ENDP
|L1.132|
DCD 0x40010800
|L1.136|
DCD 0x40012400
AREA ||i.Delay_ms||, CODE, READONLY, ALIGN=1
Delay_ms PROC
;;;27 #define IS_MF_VALID (g_RxBuf[1] == 'M' && g_RxBuf[2] == 'F')
;;;28 static void Delay_ms(uint16_t us)
000000 2100 MOVS r1,#0
;;;29 {
;;;30 uint16_t i;
;;;31
;;;32 /* 
;;;33 CPU主频168MHz时在内部Flash运行, MDK工程不优化。用台式示波器观测波形。
;;;34 循环次数为5时SCL频率 = 1.78MHz (读耗时: 92ms, 读写正常,但是用示波器探头碰上就读写失败。时序接近临界)
;;;35 循环次数为10时SCL频率 = 1.1MHz (读耗时: 138ms, 读速度: 118724B/s)
;;;36 循环次数为30时SCL频率 = 440KHz SCL高电平时间1.0usSCL低电平时间1.2us
;;;37
;;;38 上拉电阻选择2.2K欧时SCL上升沿时间约0.5us如果选4.7K欧则上升沿约1us
;;;39
;;;40 实际应用选择400KHz左右的速率即可
;;;41 */
;;;42 for (i = 0; i < (300 * us); i++)
000002 e001 B |L2.8|
|L2.4|
000004 1c4a ADDS r2,r1,#1
000006 b291 UXTH r1,r2
|L2.8|
000008 f44f7296 MOV r2,#0x12c
00000c 4342 MULS r2,r0,r2
00000e 428a CMP r2,r1
000010 dcf8 BGT |L2.4|
;;;43 ;
;;;44 }
000012 4770 BX lr
;;;45 void key1_task(void);
ENDP
AREA ||i.Get_Adc||, CODE, READONLY, ALIGN=2
Get_Adc PROC
;;;93 // ch:通道值 0~3 ADC_Channel_1
;;;94 u16 Get_Adc(u8 ch)
000000 b510 PUSH {r4,lr}
;;;95 {
000002 4604 MOV r4,r0
;;;96 // 设置指定ADC的规则组通道一个序列采样时间
;;;97 ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5); // ADC1,ADC通道,采样时间为239.5周期
000004 2307 MOVS r3,#7
000006 2201 MOVS r2,#1
000008 4621 MOV r1,r4
00000a 4809 LDR r0,|L3.48|
00000c f7fffffe BL ADC_RegularChannelConfig
;;;98
;;;99 ADC_SoftwareStartConvCmd(ADC1, ENABLE); // 使能指定的ADC1的软件转换启动功能
000010 2101 MOVS r1,#1
000012 4807 LDR r0,|L3.48|
000014 f7fffffe BL ADC_SoftwareStartConvCmd
;;;100
;;;101 while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC))
000018 bf00 NOP
|L3.26|
00001a 2102 MOVS r1,#2
00001c 4804 LDR r0,|L3.48|
00001e f7fffffe BL ADC_GetFlagStatus
000022 2800 CMP r0,#0
000024 d0f9 BEQ |L3.26|
;;;102 ; // 等待转换结束
;;;103
;;;104 return ADC_GetConversionValue(ADC1); // 返回最近一次ADC1规则组的转换结果
000026 4802 LDR r0,|L3.48|
000028 f7fffffe BL ADC_GetConversionValue
;;;105 }
00002c bd10 POP {r4,pc}
;;;106
ENDP
00002e 0000 DCW 0x0000
|L3.48|
DCD 0x40012400
AREA ||i.Get_Adc_Average||, CODE, READONLY, ALIGN=1
Get_Adc_Average PROC
;;;106
;;;107 u16 Get_Adc_Average(u8 ch, u8 times)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;108 {
000004 4607 MOV r7,r0
000006 460c MOV r4,r1
;;;109 u32 temp_val = 0;
000008 2500 MOVS r5,#0
;;;110 u8 t;
;;;111 for (t = 0; t < times; t++)
00000a 2600 MOVS r6,#0
00000c e008 B |L4.32|
|L4.14|
;;;112 {
;;;113 temp_val += Get_Adc(ch);
00000e 4638 MOV r0,r7
000010 f7fffffe BL Get_Adc
000014 4405 ADD r5,r5,r0
;;;114 Delay_ms(5);
000016 2005 MOVS r0,#5
000018 f7fffffe BL Delay_ms
00001c 1c70 ADDS r0,r6,#1 ;111
00001e b2c6 UXTB r6,r0 ;111
|L4.32|
000020 42a6 CMP r6,r4 ;111
000022 dbf4 BLT |L4.14|
;;;115 }
;;;116 return temp_val / times;
000024 fbb5f0f4 UDIV r0,r5,r4
000028 b280 UXTH r0,r0
;;;117 }
00002a e8bd81f0 POP {r4-r8,pc}
;;;118
ENDP
AREA ||i.get_key4_adc||, CODE, READONLY, ALIGN=1
get_key4_adc PROC
;;;118
;;;119 u16 get_key4_adc(void)
000000 b570 PUSH {r4-r6,lr}
;;;120 {
;;;121 u16 key4_adc = 0;
000002 2400 MOVS r4,#0
;;;122 u16 ad_value;
;;;123
;;;124 ad_value = Get_Adc_Average(ADC_Channel_1, 10);
000004 210a MOVS r1,#0xa
000006 2001 MOVS r0,#1
000008 f7fffffe BL Get_Adc_Average
00000c 4605 MOV r5,r0
;;;125
;;;126 key4_adc = ad_value;
00000e 462c MOV r4,r5
;;;127 if (key4_adc > 3000)
000010 f64030b8 MOV r0,#0xbb8
000014 4284 CMP r4,r0
000016 dd01 BLE |L5.28|
;;;128 {
;;;129 key4_adc = 2; // 前进
000018 2402 MOVS r4,#2
00001a e00c B |L5.54|
|L5.28|
;;;130 }
;;;131 else if (key4_adc <= 1200)
00001c f5b46f96 CMP r4,#0x4b0
000020 dc01 BGT |L5.38|
;;;132 {
;;;133 key4_adc = 1; // 后退
000022 2401 MOVS r4,#1
000024 e007 B |L5.54|
|L5.38|
;;;134 }
;;;135 else if ((key4_adc > 1200) && (key4_adc <= 3000))
000026 f5b46f96 CMP r4,#0x4b0
00002a dd04 BLE |L5.54|
00002c f64030b8 MOV r0,#0xbb8
000030 4284 CMP r4,r0
000032 dc00 BGT |L5.54|
;;;136 {
;;;137 key4_adc = 0; // 后退
000034 2400 MOVS r4,#0
|L5.54|
;;;138 }
;;;139 return key4_adc;
000036 4620 MOV r0,r4
;;;140 }
000038 bd70 POP {r4-r6,pc}
;;;141 u16 get_key5_adc(void)
ENDP
AREA ||i.get_key5_adc||, CODE, READONLY, ALIGN=2
get_key5_adc PROC
;;;140 }
;;;141 u16 get_key5_adc(void)
000000 e92d5ff0 PUSH {r4-r12,lr}
;;;142 {
;;;143 u16 key5_adc = 0;
000004 f04f0a00 MOV r10,#0
;;;144 u16 ad_value;
;;;145
;;;146 ad_value = Get_Adc_Average(ADC_Channel_2, 10);
000008 210a MOVS r1,#0xa
00000a 2002 MOVS r0,#2
00000c f7fffffe BL Get_Adc_Average
000010 4683 MOV r11,r0
;;;147
;;;148 // electric_quantity_percent = ((ad_value*3.3/4096.0)-1.846)*100/0.52;
;;;149 key5_adc = (ad_value * 3.3 / 4096.0);
000012 4658 MOV r0,r11
000014 f7fffffe BL __aeabi_ui2d
000018 4680 MOV r8,r0
00001a f04f3266 MOV r2,#0x66666666
00001e 4b13 LDR r3,|L6.108|
000020 f7fffffe BL __aeabi_dmul
000024 4606 MOV r6,r0
000026 2200 MOVS r2,#0
000028 4b11 LDR r3,|L6.112|
00002a f7fffffe BL __aeabi_ddiv
00002e 4604 MOV r4,r0
000030 f7fffffe BL __aeabi_d2uiz
000034 fa1ffa80 UXTH r10,r0
;;;150
;;;151 if (key5_adc >= 3000)
000038 f64030b8 MOV r0,#0xbb8
00003c 4582 CMP r10,r0
00003e db02 BLT |L6.70|
;;;152 {
;;;153 key5_adc = 1; // 前进
000040 f04f0a01 MOV r10,#1
000044 e00e B |L6.100|
|L6.70|
;;;154 }
;;;155 else if (key5_adc <= 1200)
000046 f5ba6f96 CMP r10,#0x4b0
00004a dc02 BGT |L6.82|
;;;156 {
;;;157 key5_adc = 2; // 后退
00004c f04f0a02 MOV r10,#2
000050 e008 B |L6.100|
|L6.82|
;;;158 }
;;;159 else if ((key5_adc > 1200) && (key5_adc < 3000))
000052 f5ba6f96 CMP r10,#0x4b0
000056 dd05 BLE |L6.100|
000058 f64030b8 MOV r0,#0xbb8
00005c 4582 CMP r10,r0
00005e da01 BGE |L6.100|
;;;160 {
;;;161 key5_adc = 0; // 后退
000060 f04f0a00 MOV r10,#0
|L6.100|
;;;162 }
;;;163 return key5_adc;
000064 4650 MOV r0,r10
;;;164 }
000066 e8bd9ff0 POP {r4-r12,pc}
;;;165
ENDP
00006a 0000 DCW 0x0000
|L6.108|
DCD 0x400a6666
|L6.112|
DCD 0x40b00000
AREA ||i.main||, CODE, READONLY, ALIGN=2
REQUIRE _printf_percent
REQUIRE _printf_u
REQUIRE _printf_int_dec
REQUIRE _printf_sizespec
REQUIRE _printf_pre_padding
REQUIRE _printf_flags
REQUIRE _printf_widthprec
REQUIRE _printf_x
REQUIRE _printf_longlong_hex
main PROC
;;;209 }
;;;210 int main(void)
000000 b508 PUSH {r3,lr}
;;;211 {
;;;212 uint8_t ucKeyCode;
;;;213 uint32_t freq = 1500;
000002 f24058dc MOV r8,#0x5dc
;;;214 uint16_t motor_move1 = 0;
000006 2700 MOVS r7,#0
;;;215 uint32_t g_sysclk_src = 0, g_pll_mul = 0;
000008 2500 MOVS r5,#0
00000a 2600 MOVS r6,#0
;;;216 // uint16_t motor_move2 = 0;
;;;217
;;;218 SCB->VTOR = 0x08008000;
00000c 484a LDR r0,|L7.312|
00000e 494b LDR r1,|L7.316|
000010 6008 STR r0,[r1,#0]
;;;219
;;;220 /* === MCO 测试: PA8 输出 PLLCLK/2示波器测量 PA8 === */
;;;221 {
;;;222 GPIO_InitTypeDef GPIO_InitStruct;
;;;223 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
000012 2101 MOVS r1,#1
000014 2004 MOVS r0,#4
000016 f7fffffe BL RCC_APB2PeriphClockCmd
;;;224 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
00001a f44f7080 MOV r0,#0x100
00001e f8ad0000 STRH r0,[sp,#0]
;;;225 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
000022 2018 MOVS r0,#0x18
000024 f88d0003 STRB r0,[sp,#3]
;;;226 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
000028 2003 MOVS r0,#3
00002a f88d0002 STRB r0,[sp,#2]
;;;227 GPIO_Init(GPIOA, &GPIO_InitStruct);
00002e 4669 MOV r1,sp
000030 4843 LDR r0,|L7.320|
000032 f7fffffe BL GPIO_Init
;;;228 RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_MCO) | RCC_CFGR_MCO_PLL;
000036 4843 LDR r0,|L7.324|
000038 6840 LDR r0,[r0,#4]
00003a f04060e0 ORR r0,r0,#0x7000000
00003e 4941 LDR r1,|L7.324|
000040 6048 STR r0,[r1,#4]
;;;229 /* MCO 输出 PLL/272MHz 系统 = 36MHz, 48MHz 系统 = 24MHz */
;;;230 }
;;;231
;;;232 /* 运行时检测实际系统时钟 */
;;;233 {
;;;234 g_sysclk_src = RCC->CFGR & RCC_CFGR_SWS;
000042 4608 MOV r0,r1
000044 6840 LDR r0,[r0,#4]
000046 f000050c AND r5,r0,#0xc
;;;235 if (g_sysclk_src == 0x08)
00004a 2d08 CMP r5,#8
00004c d104 BNE |L7.88|
;;;236 {
;;;237 g_pll_mul = (RCC->CFGR & RCC_CFGR_PLLMULL) >> 18;
00004e 4608 MOV r0,r1
000050 6840 LDR r0,[r0,#4]
000052 f3c04683 UBFX r6,r0,#18,#4
;;;238 g_pll_mul = g_pll_mul + 2;
000056 1cb6 ADDS r6,r6,#2
|L7.88|
;;;239 }
;;;240 }
;;;241
;;;242 bsp_Init(); /* 硬件初始化 */
000058 f7fffffe BL bsp_Init
;;;243
;;;244 /* 打印调试信息(需在串口初始化后) */
;;;245 {
;;;246 if (g_sysclk_src == 0x00)
00005c b91d CBNZ r5,|L7.102|
;;;247 printf("SYSCLK = HSI 8MHz\r\n");
00005e a03a ADR r0,|L7.328|
000060 f7fffffe BL __2printf
000064 e00d B |L7.130|
|L7.102|
;;;248 else if (g_sysclk_src == 0x04)
000066 2d04 CMP r5,#4
000068 d103 BNE |L7.114|
;;;249 printf("SYSCLK = HSE\r\n");
00006a a03c ADR r0,|L7.348|
00006c f7fffffe BL __2printf
000070 e007 B |L7.130|
|L7.114|
;;;250 else if (g_sysclk_src == 0x08)
000072 2d08 CMP r5,#8
000074 d105 BNE |L7.130|
;;;251 {
;;;252 printf("PLL MUL = %u, PLL = 8MHz * %u = %uMHz\r\n", g_pll_mul, g_pll_mul, 8 * g_pll_mul);
000076 00f3 LSLS r3,r6,#3
000078 4632 MOV r2,r6
00007a 4631 MOV r1,r6
00007c a03b ADR r0,|L7.364|
00007e f7fffffe BL __2printf
|L7.130|
;;;253 }
;;;254 printf("SystemCoreClock var = %lu\r\n", SystemCoreClock);
000082 4844 LDR r0,|L7.404|
000084 6801 LDR r1,[r0,#0] ; SystemCoreClock
000086 a044 ADR r0,|L7.408|
000088 f7fffffe BL __2printf
;;;255 printf("RCC->CFGR = 0x%08lX, PPRE1=%lu\r\n", RCC->CFGR, (RCC->CFGR >> 8) & 0x7);
00008c 482d LDR r0,|L7.324|
00008e 6840 LDR r0,[r0,#4]
000090 f3c02202 UBFX r2,r0,#8,#3
000094 482b LDR r0,|L7.324|
000096 6841 LDR r1,[r0,#4]
000098 a046 ADR r0,|L7.436|
00009a f7fffffe BL __2printf
;;;256 printf("TIM6 PSC = %u, ARR = %u\r\n", TIM6->PSC, TIM6->ARR);
00009e 484e LDR r0,|L7.472|
0000a0 8d82 LDRH r2,[r0,#0x2c]
0000a2 8d01 LDRH r1,[r0,#0x28]
0000a4 a04d ADR r0,|L7.476|
0000a6 f7fffffe BL __2printf
;;;257 }
;;;258
;;;259 Adc_Init(); // ADC初始化
0000aa f7fffffe BL Adc_Init
;;;260 BEEP_Start(freq, 20, 1, 1);
0000ae 2301 MOVS r3,#1
0000b0 461a MOV r2,r3
0000b2 2114 MOVS r1,#0x14
0000b4 4640 MOV r0,r8
0000b6 f7fffffe BL BEEP_Start
;;;261
;;;262 g_tTube.state = WORK;
0000ba 2001 MOVS r0,#1
0000bc 494e LDR r1,|L7.504|
0000be 72c8 STRB r0,[r1,#0xb]
;;;263 MOTO_Stop();
0000c0 f7fffffe BL MOTO_Stop
;;;264
;;;265 /* 主程序大循环 */
;;;266 while (1)
0000c4 e036 B |L7.308|
|L7.198|
;;;267 {
;;;268 bsp_Idle(); /* CPU空闲时执行的函数在 bsp.c */
0000c6 f7fffffe BL bsp_Idle
;;;269 uart_msg_idle();
0000ca f7fffffe BL uart_msg_idle
;;;270 if (Flag_100ms == 1)
0000ce 484b LDR r0,|L7.508|
0000d0 7800 LDRB r0,[r0,#0] ; Flag_100ms
0000d2 2801 CMP r0,#1
0000d4 d11a BNE |L7.268|
;;;271 {
;;;272 Flag_100ms = 0;
0000d6 2000 MOVS r0,#0
0000d8 4948 LDR r1,|L7.508|
0000da 7008 STRB r0,[r1,#0]
;;;273 motor_move1 = get_key4_adc();
0000dc f7fffffe BL get_key4_adc
0000e0 4607 MOV r7,r0
;;;274 // motor_move2 = get_key5_adc();
;;;275 if (motor_move1 == 1) // key4
0000e2 2f01 CMP r7,#1
0000e4 d108 BNE |L7.248|
;;;276 {
;;;277 motor_move1 = 0;
0000e6 2700 MOVS r7,#0
;;;278 // 前进
;;;279 motor_dir(1500, 0, 3000);
0000e8 f64032b8 MOV r2,#0xbb8
0000ec 2300 MOVS r3,#0
0000ee 4619 MOV r1,r3
0000f0 1050 ASRS r0,r2,#1
0000f2 f7fffffe BL motor_dir
0000f6 e009 B |L7.268|
|L7.248|
;;;280 }
;;;281 else if (motor_move1 == 2)
0000f8 2f02 CMP r7,#2
0000fa d107 BNE |L7.268|
;;;282 {
;;;283 motor_move1 = 0;
0000fc 2700 MOVS r7,#0
;;;284 // 后退
;;;285 motor_dir(1500, 1, 3000);
0000fe f64032b8 MOV r2,#0xbb8
000102 2300 MOVS r3,#0
000104 2101 MOVS r1,#1
000106 1050 ASRS r0,r2,#1
000108 f7fffffe BL motor_dir
|L7.268|
;;;286 }
;;;287 }
;;;288 /* 处理按键事件 */
;;;289 ucKeyCode = bsp_GetKey();
00010c f7fffffe BL bsp_GetKey
000110 4604 MOV r4,r0
;;;290
;;;291 if (ucKeyCode > 0)
000112 2c00 CMP r4,#0
000114 dd0e BLE |L7.308|
;;;292 {
;;;293 /* 有键按下 */
;;;294 switch (ucKeyCode) // key6
000116 2c01 CMP r4,#1
000118 d002 BEQ |L7.288|
00011a 2c04 CMP r4,#4
00011c d108 BNE |L7.304|
00011e e002 B |L7.294|
|L7.288|
;;;295 {
;;;296 case KEY_DOWN_K6: // key6 短按
;;;297 {
;;;298 MOTO_ZorePos();
000120 f7fffffe BL MOTO_ZorePos
;;;299 break;
000124 e005 B |L7.306|
|L7.294|
;;;300 }
;;;301
;;;302 case KEY_DOWN_K1: // Key1 短按
;;;303 {
;;;304 BEEP_KeyTone(); // 按键提示音
000126 f7fffffe BL BEEP_KeyTone
;;;305 bsp_ToogleDispMode();
00012a f7fffffe BL bsp_ToogleDispMode
;;;306 break;
00012e e000 B |L7.306|
|L7.304|
;;;307 }
;;;308
;;;309 default:
;;;310 break;
000130 bf00 NOP
|L7.306|
000132 bf00 NOP ;299
|L7.308|
000134 e7c7 B |L7.198|
;;;311 }
;;;312 }
;;;313 }
;;;314 }
;;;315
ENDP
000136 0000 DCW 0x0000
|L7.312|
DCD 0x08008000
|L7.316|
DCD 0xe000ed08
|L7.320|
DCD 0x40010800
|L7.324|
DCD 0x40021000
|L7.328|
000148 53595343 DCB "SYSCLK = HSI 8MHz\r\n",0
00014c 4c4b203d
000150 20485349
000154 20384d48
000158 7a0d0a00
|L7.348|
00015c 53595343 DCB "SYSCLK = HSE\r\n",0
000160 4c4b203d
000164 20485345
000168 0d0a00
00016b 00 DCB 0
|L7.364|
00016c 504c4c20 DCB "PLL MUL = %u, PLL = 8MHz * %u = %uMHz\r\n",0
000170 4d554c20
000174 3d202575
000178 2c20504c
00017c 4c203d20
000180 384d487a
000184 202a2025
000188 75203d20
00018c 25754d48
000190 7a0d0a00
|L7.404|
DCD SystemCoreClock
|L7.408|
000198 53797374 DCB "SystemCoreClock var = %lu\r\n",0
00019c 656d436f
0001a0 7265436c
0001a4 6f636b20
0001a8 76617220
0001ac 3d20256c
0001b0 750d0a00
|L7.436|
0001b4 5243432d DCB "RCC->CFGR = 0x%08lX, PPRE1=%lu\r\n",0
0001b8 3e434647
0001bc 52203d20
0001c0 30782530
0001c4 386c582c
0001c8 20505052
0001cc 45313d25
0001d0 6c750d0a
0001d4 00
0001d5 00 DCB 0
0001d6 00 DCB 0
0001d7 00 DCB 0
|L7.472|
DCD 0x40001000
|L7.476|
0001dc 54494d36 DCB "TIM6 PSC = %u, ARR = %u\r\n",0
0001e0 20505343
0001e4 203d2025
0001e8 752c2041
0001ec 5252203d
0001f0 2025750d
0001f4 0a00
0001f6 00 DCB 0
0001f7 00 DCB 0
|L7.504|
DCD g_tTube
|L7.508|
DCD Flag_100ms
AREA ||i.motor_dir||, CODE, READONLY, ALIGN=2
motor_dir PROC
;;;165
;;;166 void motor_dir(uint32_t freq, uint8_t _dir, int64_t _stpes)
000000 e92d41f0 PUSH {r4-r8,lr}
;;;167 {
000004 4607 MOV r7,r0
000006 460c MOV r4,r1
000008 4615 MOV r5,r2
00000a 461e MOV r6,r3
;;;168 // [r,1,1500,108288]
;;;169
;;;170 if (g_tTube.state == WORK)
00000c 482b LDR r0,|L8.188|
00000e 7ac0 LDRB r0,[r0,#0xb] ; g_tTube
000010 2801 CMP r0,#1
000012 d150 BNE |L8.182|
;;;171 {
;;;172 if (_dir == 1)
000014 2c01 CMP r4,#1
000016 d117 BNE |L8.72|
;;;173 {
;;;174 _dir = 1;
000018 bf00 NOP
;;;175 if (g_tMoto.sv_pulse + 100 < INT64_MAX)
00001a 4929 LDR r1,|L8.192|
00001c e9d1010a LDRD r0,r1,[r1,#0x28]
000020 3064 ADDS r0,r0,#0x64
000022 f1410100 ADC r1,r1,#0
000026 f06f4200 MVN r2,#0x80000000
00002a 4051 EORS r1,r1,r2
00002c ea710000 ORNS r0,r1,r0
000030 d020 BEQ |L8.116|
;;;176 g_tMoto.sv_pulse = g_tMoto.sv_pulse + 100;
000032 4823 LDR r0,|L8.192|
000034 e9d0300a LDRD r3,r0,[r0,#0x28]
000038 2264 MOVS r2,#0x64
00003a 189a ADDS r2,r3,r2
00003c f1400000 ADC r0,r0,#0
000040 491f LDR r1,|L8.192|
000042 e9c1200a STRD r2,r0,[r1,#0x28]
000046 e015 B |L8.116|
|L8.72|
;;;177 }
;;;178 else if (_dir == 0)
000048 b9a4 CBNZ r4,|L8.116|
;;;179 {
;;;180 _dir = 0;
00004a 2400 MOVS r4,#0
;;;181 if (g_tMoto.sv_pulse - 100 > INT64_MIN)
00004c 491c LDR r1,|L8.192|
00004e e9d1010a LDRD r0,r1,[r1,#0x28]
000052 3864 SUBS r0,r0,#0x64
000054 f1610100 SBC r1,r1,#0
000058 f04f4200 MOV r2,#0x80000000
00005c 4051 EORS r1,r1,r2
00005e 4308 ORRS r0,r0,r1
000060 d008 BEQ |L8.116|
;;;182 g_tMoto.sv_pulse = g_tMoto.sv_pulse - 100;
000062 4817 LDR r0,|L8.192|
000064 e9d0200a LDRD r2,r0,[r0,#0x28]
000068 3a64 SUBS r2,r2,#0x64
00006a f1600000 SBC r0,r0,#0
00006e 4914 LDR r1,|L8.192|
000070 e9c1200a STRD r2,r0,[r1,#0x28]
|L8.116|
;;;183 }
;;;184
;;;185 if (g_tMoto.pv_pulse < g_tMoto.sv_pulse)
000074 4812 LDR r0,|L8.192|
000076 e9d01008 LDRD r1,r0,[r0,#0x20]
00007a 4a11 LDR r2,|L8.192|
00007c e9d2320a LDRD r3,r2,[r2,#0x28]
000080 1ac9 SUBS r1,r1,r3
000082 4190 SBCS r0,r0,r2
000084 da07 BGE |L8.150|
;;;186 {
;;;187
;;;188 if (g_tMoto.sv_pulse > INT64_MAX)
000086 bf00 NOP
;;;189 {
;;;190 g_tMoto.sv_pulse = INT64_MAX;
;;;191 }
;;;192 else if (g_tMoto.sv_pulse <= INT64_MAX)
;;;193 {
;;;194 MOTO_Start(1500, 0, 100);
000088 2264 MOVS r2,#0x64
00008a 2100 MOVS r1,#0
00008c f24050dc MOV r0,#0x5dc
000090 f7fffffe BL MOTO_Start
000094 e00f B |L8.182|
|L8.150|
;;;195 }
;;;196 }
;;;197 else if (g_tMoto.pv_pulse > g_tMoto.sv_pulse)
000096 480a LDR r0,|L8.192|
000098 e9d0200a LDRD r2,r0,[r0,#0x28]
00009c 4908 LDR r1,|L8.192|
00009e e9d13108 LDRD r3,r1,[r1,#0x20]
0000a2 1ad2 SUBS r2,r2,r3
0000a4 4188 SBCS r0,r0,r1
0000a6 da06 BGE |L8.182|
;;;198 {
;;;199 if (g_tMoto.sv_pulse < INT64_MIN)
0000a8 bf00 NOP
;;;200 {
;;;201 g_tMoto.sv_pulse = INT64_MIN;
;;;202 }
;;;203 else if (g_tMoto.sv_pulse >= INT64_MIN)
;;;204 {
;;;205 MOTO_Start(1500, 1, 100);
0000aa 2264 MOVS r2,#0x64
0000ac 2101 MOVS r1,#1
0000ae f24050dc MOV r0,#0x5dc
0000b2 f7fffffe BL MOTO_Start
|L8.182|
;;;206 }
;;;207 }
;;;208 }
;;;209 }
0000b6 e8bd81f0 POP {r4-r8,pc}
;;;210 int main(void)
ENDP
0000ba 0000 DCW 0x0000
|L8.188|
DCD g_tTube
|L8.192|
DCD g_tMoto
AREA ||i.print_sys_info||, CODE, READONLY, ALIGN=2
REQUIRE _printf_percent
REQUIRE _printf_s
REQUIRE _printf_str
REQUIRE _printf_str
print_sys_info PROC
;;;321
;;;322 void print_sys_info(void)
000000 b510 PUSH {r4,lr}
;;;323 {
;;;324 printf("\r\n");
000002 a019 ADR r0,|L9.104|
000004 f7fffffe BL __2printf
;;;325 printf("----------------------------->\r\n");
000008 a018 ADR r0,|L9.108|
00000a f7fffffe BL __2printf
;;;326 printf("-> 设备名称:无限旋转控制器\r\n");
00000e a020 ADR r0,|L9.144|
000010 f7fffffe BL __2printf
;;;327 printf("-> software verson: V1.0\r\n");
000014 a029 ADR r0,|L9.188|
000016 f7fffffe BL __2printf
;;;328 printf("-> compile time: %s\r\n", __TIME__);
00001a a12f ADR r1,|L9.216|
00001c a031 ADR r0,|L9.228|
00001e f7fffffe BL __2printf
;;;329 printf("-> compile date: %s\r\n", __DATE__);
000022 a136 ADR r1,|L9.252|
000024 a038 ADR r0,|L9.264|
000026 f7fffffe BL __2printf
;;;330 printf("-> [多场低温科技有限公司]\r\n");
00002a a03d ADR r0,|L9.288|
00002c f7fffffe BL __2printf
;;;331 printf("------------------------------\r\n");
000030 a045 ADR r0,|L9.328|
000032 f7fffffe BL __2printf
;;;332 printf("->可用命令:\r\n");
000036 a04d ADR r0,|L9.364|
000038 f7fffffe BL __2printf
;;;333 printf("1. [s] // 停止电机转动\r\n");
00003c a051 ADR r0,|L9.388|
00003e f7fffffe BL __2printf
;;;334 printf("2. [?] // 读取当前位置角度\r\n");
000042 a058 ADR r0,|L9.420|
000044 f7fffffe BL __2printf
;;;335 printf("3. [z] // 设置当前位置为零点\r\n");
000048 a060 ADR r0,|L9.460|
00004a f7fffffe BL __2printf
;;;336 printf("4. [MF] // 打印系统信息\r\n");
00004e a06a ADR r0,|L9.504|
000050 f7fffffe BL __2printf
;;;337 printf("5. [r:10:360] // 转动命令10为转动角速度360为目标角度\r\n");
000054 4870 LDR r0,|L9.536|
000056 f7fffffe BL __2printf
;;;338 printf("6. [rr:10:20] // 转动命令10为转动角速度20为相对转动角度\r\n");
00005a 4870 LDR r0,|L9.540|
00005c f7fffffe BL __2printf
;;;339 printf("<-----------------------------\r\n");
000060 a06f ADR r0,|L9.544|
000062 f7fffffe BL __2printf
;;;340 }
000066 bd10 POP {r4,pc}
;;;341
ENDP
|L9.104|
000068 0d0a00 DCB "\r\n",0
00006b 00 DCB 0
|L9.108|
00006c 2d2d2d2d DCB "----------------------------->\r\n",0
000070 2d2d2d2d
000074 2d2d2d2d
000078 2d2d2d2d
00007c 2d2d2d2d
000080 2d2d2d2d
000084 2d2d2d2d
000088 2d3e0d0a
00008c 00
00008d 00 DCB 0
00008e 00 DCB 0
00008f 00 DCB 0
|L9.144|
000090 2d3e20e8 DCB "-> ",232,174,190,229,164,135,229,144,141,231,167,176,239
000094 aebee5a4
000098 87e5908d
00009c e7a7b0ef
0000a0 bc9ae697 DCB 188,154,230,151,160,233,153,144,230,151,139,232,189,172,230
0000a4 a0e99990
0000a8 e6978be8
0000ac bdace6
0000af 8ea7e588 DCB 142,167,229,136,182,229,153,168,"\r\n",0
0000b3 b6e599a8
0000b7 0d0a00
0000ba 00 DCB 0
0000bb 00 DCB 0
|L9.188|
0000bc 2d3e2073 DCB "-> software verson: V1.0\r\n",0
0000c0 6f667477
0000c4 61726520
0000c8 76657273
0000cc 6f6e3a20
0000d0 56312e30
0000d4 0d0a00
0000d7 00 DCB 0
|L9.216|
0000d8 31363a32 DCB "16:27:16",0
0000dc 373a3136
0000e0 00
0000e1 00 DCB 0
0000e2 00 DCB 0
0000e3 00 DCB 0
|L9.228|
0000e4 2d3e2063 DCB "-> compile time: %s\r\n",0
0000e8 6f6d7069
0000ec 6c652074
0000f0 696d653a
0000f4 2025730d
0000f8 0a00
0000fa 00 DCB 0
0000fb 00 DCB 0
|L9.252|
0000fc 41707220 DCB "Apr 16 2026",0
000100 31362032
000104 30323600
|L9.264|
000108 2d3e2063 DCB "-> compile date: %s\r\n",0
00010c 6f6d7069
000110 6c652064
000114 6174653a
000118 2025730d
00011c 0a00
00011e 00 DCB 0
00011f 00 DCB 0
|L9.288|
000120 2d3e205b DCB "-> [",229,164,154,229,156,186,228,189,142,230,184,169,231
000124 e5a49ae5
000128 9cbae4bd
00012c 8ee6b8a9
000130 e7
000131 a791e68a DCB 167,145,230,138,128,230,156,137,233,153,144,229,133,172,229
000135 80e69c89
000139 e99990e5
00013d 85ace5
000140 8fb85d0d DCB 143,184,"]\r\n",0
000144 0a00
000146 00 DCB 0
000147 00 DCB 0
|L9.328|
000148 2d2d2d2d DCB "------------------------------\r\n",0
00014c 2d2d2d2d
000150 2d2d2d2d
000154 2d2d2d2d
000158 2d2d2d2d
00015c 2d2d2d2d
000160 2d2d2d2d
000164 2d2d0d0a
000168 00
000169 00 DCB 0
00016a 00 DCB 0
00016b 00 DCB 0
|L9.364|
00016c 2d3ee58f DCB "->",229,143,175,231,148,168,229,145,189,228,187,164,239
000170 afe794a8
000174 e591bde4
000178 bba4ef
00017b bc9a5c72 DCB 188,154,"\\r\n",0
00017f 0a00
000181 00 DCB 0
000182 00 DCB 0
000183 00 DCB 0
|L9.388|
000184 312e205b DCB "1. [s] // ",229,129,156,230,173,162,231,148,181,230,156
000188 735d2020
00018c 2f2f20e5
000190 819ce6ad
000194 a2e794b5
000198 e69c
00019a bae8bdac DCB 186,232,189,172,229,138,168,"\r\n",0
00019e e58aa80d
0001a2 0a00
|L9.420|
0001a4 322e205b DCB "2. [?] // ",232,175,187,229,143,150,229,189,147,229,137
0001a8 3f5d2020
0001ac 2f2f20e8
0001b0 afbbe58f
0001b4 96e5bd93
0001b8 e589
0001ba 8de4bd8d DCB 141,228,189,141,231,189,174,232,167,146,229,186,166,"\r\n"
0001be e7bdaee8
0001c2 a792e5ba
0001c6 a60d0a
0001c9 00 DCB 0
0001ca 00 DCB 0
0001cb 00 DCB 0
|L9.460|
0001cc 332e205b DCB "3. [z] // ",232,174,190,231,189,174,229,189,147,229,137
0001d0 7a5d2020
0001d4 2f2f20e8
0001d8 aebee7bd
0001dc aee5bd93
0001e0 e589
0001e2 8de4bd8d DCB 141,228,189,141,231,189,174,228,184,186,233,155,182,231,130
0001e6 e7bdaee4
0001ea b8bae99b
0001ee b6e782
0001f1 b95c720a DCB 185,"\\r\n",0
0001f5 00
0001f6 00 DCB 0
0001f7 00 DCB 0
|L9.504|
0001f8 342e205b DCB "4. [MF] // ",230,137,147,229,141,176,231,179,187,231,187
0001fc 4d465d20
000200 2f2f20e6
000204 8993e58d
000208 b0e7b3bb
00020c e7bb
00020e 9fe4bfa1 DCB 159,228,191,161,230,129,175,"\r\n",0
000212 e681af0d
000216 0a00
|L9.536|
DCD ||.conststring||
|L9.540|
DCD ||.conststring||+0x50
|L9.544|
000220 3c2d2d2d DCB "<-----------------------------\r\n",0
000224 2d2d2d2d
000228 2d2d2d2d
00022c 2d2d2d2d
000230 2d2d2d2d
000234 2d2d2d2d
000238 2d2d2d2d
00023c 2d2d0d0a
000240 00
000241 00 DCB 0
000242 00 DCB 0
000243 00 DCB 0
AREA ||i.send_sv_2_uart||, CODE, READONLY, ALIGN=2
REQUIRE _printf_percent
REQUIRE _printf_widthprec
REQUIRE _printf_f
REQUIRE _printf_fp_dec
send_sv_2_uart PROC
;;;315
;;;316 void send_sv_2_uart(void)
000000 b570 PUSH {r4-r6,lr}
;;;317 {
;;;318 float angle = g_tTube.pulse * 360.0f / STEP_PER_LAP; // 22 * 16 * 24
000002 490b LDR r1,|L10.48|
000004 6908 LDR r0,[r1,#0x10] ; g_tTube
000006 f7fffffe BL __aeabi_i2f
00000a 4606 MOV r6,r0
00000c 4909 LDR r1,|L10.52|
00000e f7fffffe BL __aeabi_fmul
000012 4605 MOV r5,r0
000014 4908 LDR r1,|L10.56|
000016 f7fffffe BL __aeabi_fdiv
00001a 4604 MOV r4,r0
;;;319 printf("[w,%.2f]\r\n", angle);
00001c 4620 MOV r0,r4
00001e f7fffffe BL __aeabi_f2d
000022 4605 MOV r5,r0
000024 462a MOV r2,r5
000026 460b MOV r3,r1
000028 a004 ADR r0,|L10.60|
00002a f7fffffe BL __2printf
;;;320 }
00002e bd70 POP {r4-r6,pc}
;;;321
ENDP
|L10.48|
DCD g_tTube
|L10.52|
DCD 0x43b40000
|L10.56|
DCD 0x46043400
|L10.60|
00003c 5b772c25 DCB "[w,%.2f]\r\n",0
000040 2e32665d
000044 0d0a00
000047 00 DCB 0
AREA ||i.uart_msg_idle||, CODE, READONLY, ALIGN=2
REQUIRE _scanf_real
REQUIRE _printf_sizespec
REQUIRE _printf_percent
REQUIRE _printf_d
REQUIRE _printf_u
REQUIRE _printf_lld
REQUIRE _printf_f
REQUIRE _printf_int_dec
REQUIRE _printf_longlong_dec
REQUIRE _printf_fp_dec
uart_msg_idle PROC
;;;341
;;;342 void uart_msg_idle(void)
000000 e92d43f0 PUSH {r4-r9,lr}
;;;343 {
000004 b087 SUB sp,sp,#0x1c
;;;344 uint8_t n = 0;
000006 2400 MOVS r4,#0
;;;345 float freq = 0;
000008 2000 MOVS r0,#0
00000a 9006 STR r0,[sp,#0x18]
;;;346 float pulse = 0;
00000c 2500 MOVS r5,#0
;;;347 float angle = 0;
00000e 9005 STR r0,[sp,#0x14]
;;;348
;;;349 if (g_ucRxRcvNewFlag)
000010 48a1 LDR r0,|L11.664|
000012 7800 LDRB r0,[r0,#0] ; g_ucRxRcvNewFlag
000014 2800 CMP r0,#0
000016 d01b BEQ |L11.80|
;;;350 {
;;;351 g_ucRxRcvNewFlag = 0;
000018 2000 MOVS r0,#0
00001a 499f LDR r1,|L11.664|
00001c 7008 STRB r0,[r1,#0]
;;;352
;;;353 n = strlen((char *)g_RxBuf);
00001e 489f LDR r0,|L11.668|
000020 f7fffffe BL strlen
000024 b2c4 UXTB r4,r0
;;;354 if (n == 3)
000026 2c03 CMP r4,#3
000028 d113 BNE |L11.82|
;;;355 {
;;;356 switch (g_RxBuf[1])
00002a 489c LDR r0,|L11.668|
00002c 7840 LDRB r0,[r0,#1] ; g_RxBuf
00002e 283f CMP r0,#0x3f
000030 d004 BEQ |L11.60|
000032 2873 CMP r0,#0x73
000034 d005 BEQ |L11.66|
000036 287a CMP r0,#0x7a
000038 d109 BNE |L11.78|
00003a e005 B |L11.72|
|L11.60|
;;;357 {
;;;358 case '?':
;;;359 send_sv_2_uart();
00003c f7fffffe BL send_sv_2_uart
;;;360 break;
000040 e006 B |L11.80|
|L11.66|
;;;361 case 's':
;;;362 MOTO_Stop();
000042 f7fffffe BL MOTO_Stop
;;;363 break;
000046 e003 B |L11.80|
|L11.72|
;;;364 case 'z':
;;;365 MOTO_ZorePos();
000048 f7fffffe BL MOTO_ZorePos
;;;366 break;
00004c e000 B |L11.80|
|L11.78|
;;;367 default:
;;;368 break;
00004e bf00 NOP
|L11.80|
000050 e11e B |L11.656|
|L11.82|
;;;369 }
;;;370 }
;;;371 else if (n == 4)
000052 2c04 CMP r4,#4
000054 d10a BNE |L11.108|
;;;372 {
;;;373 if (IS_MF_VALID)
000056 4891 LDR r0,|L11.668|
000058 7840 LDRB r0,[r0,#1] ; g_RxBuf
00005a 284d CMP r0,#0x4d
00005c d1f8 BNE |L11.80|
00005e 488f LDR r0,|L11.668|
000060 7880 LDRB r0,[r0,#2] ; g_RxBuf
000062 2846 CMP r0,#0x46
000064 d1f4 BNE |L11.80|
;;;374 {
;;;375 print_sys_info();
000066 f7fffffe BL print_sys_info
00006a e111 B |L11.656|
|L11.108|
;;;376 }
;;;377 }
;;;378 else if (g_RxBuf[1] == 'r')
00006c 488b LDR r0,|L11.668|
00006e 7840 LDRB r0,[r0,#1] ; g_RxBuf
000070 2872 CMP r0,#0x72
000072 d178 BNE |L11.358|
;;;379 {
;;;380 // [r,10,100] // 10°/s 转到100°
;;;381 if (sscanf((char *)g_RxBuf, "[r:%f:%f]", &freq, &angle) == 2)
000074 ab05 ADD r3,sp,#0x14
000076 aa06 ADD r2,sp,#0x18
000078 a189 ADR r1,|L11.672|
00007a 4888 LDR r0,|L11.668|
00007c f7fffffe BL __0sscanf
000080 2802 CMP r0,#2
000082 d176 BNE |L11.370|
;;;382 {
;;;383 if (freq < 0.01f)
000084 4989 LDR r1,|L11.684|
000086 9806 LDR r0,[sp,#0x18]
000088 f7fffffe BL __aeabi_cfcmple
00008c d202 BCS |L11.148|
;;;384 freq = 0.01f;
00008e 4887 LDR r0,|L11.684|
000090 9006 STR r0,[sp,#0x18]
000092 e006 B |L11.162|
|L11.148|
;;;385 else if (freq > MAX_SPEED)
000094 4986 LDR r1,|L11.688|
000096 9806 LDR r0,[sp,#0x18]
000098 f7fffffe BL __aeabi_cfrcmple
00009c d201 BCS |L11.162|
;;;386 freq = MAX_SPEED;
00009e 4884 LDR r0,|L11.688|
0000a0 9006 STR r0,[sp,#0x18]
|L11.162|
;;;387 pulse = (angle / 360) * STEP_PER_LAP; // angle所有需要的脉冲
0000a2 4984 LDR r1,|L11.692|
0000a4 9805 LDR r0,[sp,#0x14]
0000a6 f7fffffe BL __aeabi_fdiv
0000aa 4606 MOV r6,r0
0000ac 4982 LDR r1,|L11.696|
0000ae f7fffffe BL __aeabi_fmul
0000b2 4605 MOV r5,r0
;;;388 freq = freq * (STEP_PER_LAP / 360.0f); // 角速度所需要的脉冲频率
0000b4 4981 LDR r1,|L11.700|
0000b6 9806 LDR r0,[sp,#0x18]
0000b8 f7fffffe BL __aeabi_fmul
0000bc 9006 STR r0,[sp,#0x18]
;;;389 g_tMoto.sv_pulse = (int64_t)pulse;
0000be 4628 MOV r0,r5
0000c0 f7fffffe BL __aeabi_f2lz
0000c4 4a7e LDR r2,|L11.704|
0000c6 e9c2010a STRD r0,r1,[r2,#0x28]
;;;390
;;;391 printf("[r] freq=%lu, angle=%f, pulse=%ld, sv_pulse=%lld\r\n", (unsigned long)freq, angle, (long)pulse, g_tMoto.sv_pulse);
0000ca 4628 MOV r0,r5
0000cc f7fffffe BL __aeabi_f2iz
0000d0 4606 MOV r6,r0
0000d2 9805 LDR r0,[sp,#0x14]
0000d4 f7fffffe BL __aeabi_f2d
0000d8 4607 MOV r7,r0
0000da 4688 MOV r8,r1
0000dc 9806 LDR r0,[sp,#0x18]
0000de f7fffffe BL __aeabi_f2uiz
0000e2 4681 MOV r9,r0
0000e4 4876 LDR r0,|L11.704|
0000e6 6ac1 LDR r1,[r0,#0x2c] ; g_tMoto
0000e8 6a80 LDR r0,[r0,#0x28] ; g_tMoto
0000ea 463a MOV r2,r7
0000ec 4643 MOV r3,r8
0000ee 9600 STR r6,[sp,#0]
0000f0 e9cd0102 STRD r0,r1,[sp,#8]
0000f4 4649 MOV r1,r9
0000f6 a073 ADR r0,|L11.708|
0000f8 f7fffffe BL __2printf
;;;392 printf("TIM6 before start: PSC=%u, ARR=%u\r\n", TIM6->PSC, TIM6->ARR);
0000fc 487e LDR r0,|L11.760|
0000fe 8d82 LDRH r2,[r0,#0x2c]
000100 8d01 LDRH r1,[r0,#0x28]
000102 a07e ADR r0,|L11.764|
000104 f7fffffe BL __2printf
;;;393
;;;394 if (g_tMoto.pv_pulse < g_tMoto.sv_pulse)
000108 486d LDR r0,|L11.704|
00010a e9d03008 LDRD r3,r0,[r0,#0x20]
00010e 4a6c LDR r2,|L11.704|
000110 e9d2120a LDRD r1,r2,[r2,#0x28]
000114 1a59 SUBS r1,r3,r1
000116 4190 SBCS r0,r0,r2
000118 da08 BGE |L11.300|
;;;395 {
;;;396 MOTO_Start(freq, 0, 123);
00011a 9806 LDR r0,[sp,#0x18]
00011c f7fffffe BL __aeabi_f2uiz
000120 4606 MOV r6,r0
000122 227b MOVS r2,#0x7b
000124 2100 MOVS r1,#0
000126 f7fffffe BL MOTO_Start
00012a e018 B |L11.350|
|L11.300|
;;;397 }
;;;398 else if (g_tMoto.pv_pulse > g_tMoto.sv_pulse)
00012c 4864 LDR r0,|L11.704|
00012e e9d0100a LDRD r1,r0,[r0,#0x28]
000132 4b63 LDR r3,|L11.704|
000134 e9d32308 LDRD r2,r3,[r3,#0x20]
000138 1a89 SUBS r1,r1,r2
00013a 4198 SBCS r0,r0,r3
00013c da08 BGE |L11.336|
;;;399 {
;;;400 MOTO_Start(freq, 1, 123);
00013e 9806 LDR r0,[sp,#0x18]
000140 f7fffffe BL __aeabi_f2uiz
000144 4606 MOV r6,r0
000146 227b MOVS r2,#0x7b
000148 2101 MOVS r1,#1
00014a f7fffffe BL MOTO_Start
00014e e006 B |L11.350|
|L11.336|
;;;401 }
;;;402 else
;;;403 {
;;;404 BEEP_Start(1500, 5, 5, 3);
000150 2303 MOVS r3,#3
000152 2205 MOVS r2,#5
000154 4611 MOV r1,r2
000156 f24050dc MOV r0,#0x5dc
00015a f7fffffe BL BEEP_Start
|L11.350|
;;;405 }
;;;406 printf("TIM6 after start: PSC=%u, ARR=%u\r\n", TIM6->PSC, TIM6->ARR);
00015e 4866 LDR r0,|L11.760|
000160 8d82 LDRH r2,[r0,#0x2c]
000162 8d01 LDRH r1,[r0,#0x28]
000164 e001 B |L11.362|
|L11.358|
000166 e08c B |L11.642|
000168 e003 B |L11.370|
|L11.362|
00016a a06d ADR r0,|L11.800|
00016c f7fffffe BL __2printf
000170 e08e B |L11.656|
|L11.370|
;;;407 }
;;;408 else if (sscanf((char *)g_RxBuf, "[rr:%f:%f]", &freq, &angle) == 2)
000172 ab05 ADD r3,sp,#0x14
000174 aa06 ADD r2,sp,#0x18
000176 a173 ADR r1,|L11.836|
000178 4848 LDR r0,|L11.668|
00017a f7fffffe BL __0sscanf
00017e 2802 CMP r0,#2
000180 d177 BNE |L11.626|
;;;409 {
;;;410 if (pulse < 0.01f)
000182 494a LDR r1,|L11.684|
000184 4628 MOV r0,r5
000186 f7fffffe BL __aeabi_cfcmple
00018a d201 BCS |L11.400|
;;;411 pulse = 0.01f;
00018c 4d47 LDR r5,|L11.684|
00018e e005 B |L11.412|
|L11.400|
;;;412 else if (pulse > MAX_SPEED)
000190 4947 LDR r1,|L11.688|
000192 4628 MOV r0,r5
000194 f7fffffe BL __aeabi_cfrcmple
000198 d200 BCS |L11.412|
;;;413 pulse = MAX_SPEED;
00019a 4d45 LDR r5,|L11.688|
|L11.412|
;;;414 pulse = (angle / 360) * STEP_PER_LAP; // angle所有需要的脉冲
00019c 4945 LDR r1,|L11.692|
00019e 9805 LDR r0,[sp,#0x14]
0001a0 f7fffffe BL __aeabi_fdiv
0001a4 4606 MOV r6,r0
0001a6 4944 LDR r1,|L11.696|
0001a8 f7fffffe BL __aeabi_fmul
0001ac 4605 MOV r5,r0
;;;415 freq = freq * (STEP_PER_LAP / 360.0f); // 角速度所需要的脉冲频率
0001ae 4943 LDR r1,|L11.700|
0001b0 9806 LDR r0,[sp,#0x18]
0001b2 f7fffffe BL __aeabi_fmul
0001b6 9006 STR r0,[sp,#0x18]
;;;416 g_tMoto.sv_pulse += (int64_t)pulse;
0001b8 4628 MOV r0,r5
0001ba f7fffffe BL __aeabi_f2lz
0001be 4a40 LDR r2,|L11.704|
0001c0 e9d2320a LDRD r3,r2,[r2,#0x28]
0001c4 18c0 ADDS r0,r0,r3
0001c6 4151 ADCS r1,r1,r2
0001c8 4a3d LDR r2,|L11.704|
0001ca e9c2010a STRD r0,r1,[r2,#0x28]
;;;417
;;;418 printf("[rr] freq=%lu, angle=%f, pulse=%ld, sv_pulse=%lld\r\n", (unsigned long)freq, angle, (long)pulse, g_tMoto.sv_pulse);
0001ce 4628 MOV r0,r5
0001d0 f7fffffe BL __aeabi_f2iz
0001d4 4606 MOV r6,r0
0001d6 9805 LDR r0,[sp,#0x14]
0001d8 f7fffffe BL __aeabi_f2d
0001dc 4607 MOV r7,r0
0001de 4688 MOV r8,r1
0001e0 9806 LDR r0,[sp,#0x18]
0001e2 f7fffffe BL __aeabi_f2uiz
0001e6 4681 MOV r9,r0
0001e8 4835 LDR r0,|L11.704|
0001ea 6ac1 LDR r1,[r0,#0x2c] ; g_tMoto
0001ec 6a80 LDR r0,[r0,#0x28] ; g_tMoto
0001ee 463a MOV r2,r7
0001f0 4643 MOV r3,r8
0001f2 9600 STR r6,[sp,#0]
0001f4 e9cd0102 STRD r0,r1,[sp,#8]
0001f8 4649 MOV r1,r9
0001fa a055 ADR r0,|L11.848|
0001fc f7fffffe BL __2printf
;;;419 printf("TIM6 before start: PSC=%u, ARR=%u\r\n", TIM6->PSC, TIM6->ARR);
000200 483d LDR r0,|L11.760|
000202 8d82 LDRH r2,[r0,#0x2c]
000204 8d01 LDRH r1,[r0,#0x28]
000206 a03d ADR r0,|L11.764|
000208 f7fffffe BL __2printf
;;;420
;;;421 if (g_tMoto.pv_pulse < g_tMoto.sv_pulse)
00020c 482c LDR r0,|L11.704|
00020e e9d01008 LDRD r1,r0,[r0,#0x20]
000212 4a2b LDR r2,|L11.704|
000214 e9d2320a LDRD r3,r2,[r2,#0x28]
000218 1ac9 SUBS r1,r1,r3
00021a 4190 SBCS r0,r0,r2
00021c da08 BGE |L11.560|
;;;422 {
;;;423 MOTO_Start(freq, 0, 123);
00021e 9806 LDR r0,[sp,#0x18]
000220 f7fffffe BL __aeabi_f2uiz
000224 4606 MOV r6,r0
000226 227b MOVS r2,#0x7b
000228 2100 MOVS r1,#0
00022a f7fffffe BL MOTO_Start
00022e e018 B |L11.610|
|L11.560|
;;;424 }
;;;425 else if (g_tMoto.pv_pulse > g_tMoto.sv_pulse)
000230 4823 LDR r0,|L11.704|
000232 e9d0100a LDRD r1,r0,[r0,#0x28]
000236 4a22 LDR r2,|L11.704|
000238 e9d23208 LDRD r3,r2,[r2,#0x20]
00023c 1ac9 SUBS r1,r1,r3
00023e 4190 SBCS r0,r0,r2
000240 da08 BGE |L11.596|
;;;426 {
;;;427 MOTO_Start(freq, 1, 123);
000242 9806 LDR r0,[sp,#0x18]
000244 f7fffffe BL __aeabi_f2uiz
000248 4606 MOV r6,r0
00024a 227b MOVS r2,#0x7b
00024c 2101 MOVS r1,#1
00024e f7fffffe BL MOTO_Start
000252 e006 B |L11.610|
|L11.596|
;;;428 }
;;;429 else
;;;430 {
;;;431 BEEP_Start(1500, 5, 5, 3);
000254 2303 MOVS r3,#3
000256 2205 MOVS r2,#5
000258 4611 MOV r1,r2
00025a f24050dc MOV r0,#0x5dc
00025e f7fffffe BL BEEP_Start
|L11.610|
;;;432 }
;;;433 printf("TIM6 after start: PSC=%u, ARR=%u\r\n", TIM6->PSC, TIM6->ARR);
000262 4825 LDR r0,|L11.760|
000264 8d82 LDRH r2,[r0,#0x2c]
000266 8d01 LDRH r1,[r0,#0x28]
000268 a02d ADR r0,|L11.800|
00026a f7fffffe BL __2printf
00026e e00f B |L11.656|
000270 e7ff B |L11.626|
|L11.626|
;;;434 }
;;;435 else
;;;436 {
;;;437 BEEP_Start(1500, 5, 5, 3);
000272 2303 MOVS r3,#3
000274 2205 MOVS r2,#5
000276 4611 MOV r1,r2
000278 f24050dc MOV r0,#0x5dc
00027c f7fffffe BL BEEP_Start
000280 e006 B |L11.656|
|L11.642|
;;;438 }
;;;439 }
;;;440 else
;;;441 {
;;;442 BEEP_Start(1500, 5, 5, 3);
000282 2303 MOVS r3,#3
000284 2205 MOVS r2,#5
000286 4611 MOV r1,r2
000288 f24050dc MOV r0,#0x5dc
00028c f7fffffe BL BEEP_Start
|L11.656|
;;;443 }
;;;444 }
;;;445 }
000290 b007 ADD sp,sp,#0x1c
000292 e8bd83f0 POP {r4-r9,pc}
;;;446
ENDP
000296 0000 DCW 0x0000
|L11.664|
DCD g_ucRxRcvNewFlag
|L11.668|
DCD g_RxBuf
|L11.672|
0002a0 5b723a25 DCB "[r:%f:%f]",0
0002a4 663a2566
0002a8 5d00
0002aa 00 DCB 0
0002ab 00 DCB 0
|L11.684|
DCD 0x3c23d70a
|L11.688|
DCD 0x43c80000
|L11.692|
DCD 0x43b40000
|L11.696|
DCD 0x46043400
|L11.700|
DCD 0x41bc05b0
|L11.704|
DCD g_tMoto
|L11.708|
0002c4 5b725d20 DCB "[r] freq=%lu, angle=%f, pulse=%ld, sv_pulse=%lld\r\n",0
0002c8 66726571
0002cc 3d256c75
0002d0 2c20616e
0002d4 676c653d
0002d8 25662c20
0002dc 70756c73
0002e0 653d256c
0002e4 642c2073
0002e8 765f7075
0002ec 6c73653d
0002f0 256c6c64
0002f4 0d0a00
0002f7 00 DCB 0
|L11.760|
DCD 0x40001000
|L11.764|
0002fc 54494d36 DCB "TIM6 before start: PSC=%u, ARR=%u\r\n",0
000300 20626566
000304 6f726520
000308 73746172
00030c 743a2050
000310 53433d25
000314 752c2041
000318 52523d25
00031c 750d0a00
|L11.800|
000320 54494d36 DCB "TIM6 after start: PSC=%u, ARR=%u\r\n",0
000324 20616674
000328 65722073
00032c 74617274
000330 3a205053
000334 433d2575
000338 2c204152
00033c 523d2575
000340 0d0a00
000343 00 DCB 0
|L11.836|
000344 5b72723a DCB "[rr:%f:%f]",0
000348 25663a25
00034c 665d00
00034f 00 DCB 0
|L11.848|
000350 5b72725d DCB "[rr] freq=%lu, angle=%f, pulse=%ld, sv_pulse=%lld\r\n",0
000354 20667265
000358 713d256c
00035c 752c2061
000360 6e676c65
000364 3d25662c
000368 2070756c
00036c 73653d25
000370 6c642c20
000374 73765f70
000378 756c7365
00037c 3d256c6c
000380 640d0a00
AREA ||.conststring||, DATA, READONLY, MERGE=1, STRINGS, ALIGN=2
000000 352e205b DCB "5. [r:10:360] // ",232,189,172,229,138,168,229,145,189,228
000004 723a3130
000008 3a333630
00000c 5d202f2f
000010 20e8bdac
000014 e58aa8e5
000018 91bde4
00001b bba4efbc DCB 187,164,239,188,140,"10",228,184,186,232,189,172,229,138
00001f 8c3130e4
000023 b8bae8bd
000027 ace58a
00002a a8e8a792 DCB 168,232,167,146,233,128,159,229,186,166,239,188,140,"360"
00002e e9809fe5
000032 baa6efbc
000036 8c333630
00003a e4b8bae7 DCB 228,184,186,231,155,174,230,160,135,232,167,146,229,186,166
00003e 9baee6a0
000042 87e8a792
000046 e5baa6
000049 5c720a00 DCB "\\r\n",0
00004d 00 DCB 0
00004e 00 DCB 0
00004f 00 DCB 0
000050 362e205b DCB "6. [rr:10:20] // ",232,189,172,229,138,168,229,145,189,228
000054 72723a31
000058 303a3230
00005c 5d202f2f
000060 20e8bdac
000064 e58aa8e5
000068 91bde4
00006b bba4efbc DCB 187,164,239,188,140,"10",228,184,186,232,189,172,229,138
00006f 8c3130e4
000073 b8bae8bd
000077 ace58a
00007a a8e8a792 DCB 168,232,167,146,233,128,159,229,186,166,239,188,140,"20",228
00007e e9809fe5
000082 baa6efbc
000086 8c3230e4
00008a b8bae79b DCB 184,186,231,155,184,229,175,185,232,189,172,229,138,168,232
00008e b8e5afb9
000092 e8bdace5
000096 8aa8e8
000099 a792e5ba DCB 167,146,229,186,166,"\\r\n",0
00009d a65c720a
0000a1 00
AREA ||.data||, DATA, ALIGN=0
Flag_100ms
000000 00 DCB 0x00
;*** Start embedded assembler ***
#line 1 "..\\..\\User\\app\\src\\main.c"
AREA ||.rev16_text||, CODE
THUMB
EXPORT |__asm___6_main_c_34afbc26____REV16|
#line 114 "..\\..\\Libraries\\CMSIS\\Include\\core_cmInstr.h"
|__asm___6_main_c_34afbc26____REV16| PROC
#line 115
rev16 r0, r0
bx lr
ENDP
AREA ||.revsh_text||, CODE
THUMB
EXPORT |__asm___6_main_c_34afbc26____REVSH|
#line 128
|__asm___6_main_c_34afbc26____REVSH| PROC
#line 129
revsh r0, r0
bx lr
ENDP
;*** End embedded assembler ***
__ARM_use_no_argv EQU 0