; 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.0us,SCL低电平时间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/2:72MHz 系统 = 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