ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
724514 Топик полностью
michas (31.12.2016 12:16, просмотров: 156) ответил Крок на Записки ренегата. Совокупляюсь с СТМ32. Программа из комплекта поставки Дискавери STM_EVAL_LEDInit(LED4); исполняется за 350 шагов. Объяснить одной ноге процессора, что она будет управлять светодиодом - 350 команд. Про объёмы текстовых файлов я
Вот что у меня на кейле-лайт, M0, STM32F0xx_StdPeriph_Driver 1.4  L3s 250: // настраиваем выводы для двухцветного светодиода индикации режимов 251: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; // Светодиод 0x08003360 2130 MOVS r1,#0x30 252: GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; 0x08003362 9100 STR r1,[sp,#0x00] 0x08003364 4669 MOV r1,sp 0x08003366 710D STRB r5,[r1,#0x04] 253: GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 0x08003368 718C STRB r4,[r1,#0x06] 254: GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 0x0800336A 714E STRB r6,[r1,#0x05] 255: GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 0x0800336C 71CC STRB r4,[r1,#0x07] 256: GPIO_Init(GPIOB, &GPIO_InitStructure); 257: 258: // гасим светодиод 0x0800336E 48E6 LDR r0,[pc,#920] ; @0x08003708 0x08003370 F7FDFF0D BL.W GPIO_Init (0x0800118E) ЭТО gpio init 0x0800118E B4F0 PUSH {r4-r7} 171: uint32_t pinpos = 0x00, pos = 0x00 , currentpin = 0x00; 172: 173: /* Check the parameters */ 174: assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); 175: assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin)); 176: assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode)); 177: assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd)); 178: 179: /*-------------------------- Configure the port pins -----------------------*/ 180: /*-- GPIO Mode Configuration --*/ 181: for (pinpos = 0x00; pinpos < 0x10; pinpos++) 182: { 0x08001190 2200 MOVS r2,#0x00 183: pos = ((uint32_t)0x01) << pinpos; 184: 185: /* Get the port pins position */ 0x08001192 2701 MOVS r7,#0x01 0x08001194 463B MOV r3,r7 186: currentpin = (GPIO_InitStruct->GPIO_Pin) & pos; 187: 0x08001196 680C LDR r4,[r1,#0x00] 0x08001198 4093 LSLS r3,r3,r2 0x0800119A 401C ANDS r4,r4,r3 188: if (currentpin == pos) 189: { 0x0800119C 429C CMP r4,r3 0x0800119E D12A BNE 0x080011F6 190: if ((GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT) || (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_AF)) 191: { 192: /* Check Speed mode parameters */ 193: assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed)); 194: 195: /* Speed mode configuration */ 0x080011A0 790C LDRB r4,[r1,#0x04] 0x080011A2 2C01 CMP r4,#0x01 0x080011A4 D001 BEQ 0x080011AA 0x080011A6 2C02 CMP r4,#0x02 0x080011A8 D112 BNE 0x080011D0 196: GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (pinpos * 2)); 0x080011AA 6886 LDR r6,[r0,#0x08] 0x080011AC 0055 LSLS r5,r2,#1 0x080011AE 2403 MOVS r4,#0x03 0x080011B0 40AC LSLS r4,r4,r5 0x080011B2 43A6 BICS r6,r6,r4 0x080011B4 6086 STR r6,[r0,#0x08] 197: GPIOx->OSPEEDR |= ((uint32_t)(GPIO_InitStruct->GPIO_Speed) << (pinpos * 2)); 198: 199: /* Check Output mode parameters */ 200: assert_param(IS_GPIO_OTYPE(GPIO_InitStruct->GPIO_OType)); 201: 202: /* Output mode configuration */ 0x080011B6 794C LDRB r4,[r1,#0x05] 0x080011B8 40AC LSLS r4,r4,r5 0x080011BA 6885 LDR r5,[r0,#0x08] 0x080011BC 432C ORRS r4,r4,r5 0x080011BE 6084 STR r4,[r0,#0x08] 203: GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)pinpos)); 0x080011C0 8884 LDRH r4,[r0,#0x04] 0x080011C2 439C BICS r4,r4,r3 0x080011C4 8084 STRH r4,[r0,#0x04] 204: GPIOx->OTYPER |= (uint16_t)(((uint16_t)GPIO_InitStruct->GPIO_OType) << ((uint16_t)pinpos)); 205: } 206: 0x080011C6 8884 LDRH r4,[r0,#0x04] 0x080011C8 798B LDRB r3,[r1,#0x06] 0x080011CA 4093 LSLS r3,r3,r2 0x080011CC 431C ORRS r4,r4,r3 0x080011CE 8084 STRH r4,[r0,#0x04] 207: GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (pinpos * 2)); 208: 0x080011D0 6805 LDR r5,[r0,#0x00] 0x080011D2 0054 LSLS r4,r2,#1 0x080011D4 2303 MOVS r3,#0x03 0x080011D6 40A3 LSLS r3,r3,r4 0x080011D8 439D BICS r5,r5,r3 0x080011DA 6005 STR r5,[r0,#0x00] 209: GPIOx->MODER |= (((uint32_t)GPIO_InitStruct->GPIO_Mode) << (pinpos * 2)); 210: 211: /* Pull-up Pull down resistor configuration */ 0x080011DC 790D LDRB r5,[r1,#0x04] 0x080011DE 6806 LDR r6,[r0,#0x00] 0x080011E0 40A5 LSLS r5,r5,r4 0x080011E2 4335 ORRS r5,r5,r6 0x080011E4 6005 STR r5,[r0,#0x00] 212: GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)pinpos * 2)); 0x080011E6 68C5 LDR r5,[r0,#0x0C] 0x080011E8 439D BICS r5,r5,r3 0x080011EA 60C5 STR r5,[r0,#0x0C] 213: GPIOx->PUPDR |= (((uint32_t)GPIO_InitStruct->GPIO_PuPd) << (pinpos * 2)); 214: } 215: } 0x080011EC 79CB LDRB r3,[r1,#0x07] 0x080011EE 40A3 LSLS r3,r3,r4 0x080011F0 68C4 LDR r4,[r0,#0x0C] 0x080011F2 4323 ORRS r3,r3,r4 0x080011F4 60C3 STR r3,[r0,#0x0C] 0x080011F6 1C52 ADDS r2,r2,#1 181: for (pinpos = 0x00; pinpos < 0x10; pinpos++) 0x080011F8 2A10 CMP r2,#0x10 0x080011FA D3CB BCC 0x08001194 216: } 0x080011FC BCF0 POP {r4-r7} 0x080011FE 4770 BX lr 520: temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)); 0x08001200 074B LSLS r3,r1,#29 0x08001202 0EDB LSRS r3,r3,#27 0x08001204 409A LSLS r2,r2,r3 521: GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)); 0x08001206 08C9 LSRS r1,r1,#3 0x08001208 B410 PUSH {r4} 259: GPIO_ResetBits(GPIOB,GPIO_Pin_4); 0x08003374 2110 MOVS r1,#0x10 0x08003376 48E4 LDR r0,[pc,#912] ; @0x08003708 0x08003378 F7FDFF5A BL.W GPIO_ResetBits (0x08001230) Это GPIO_ResetBits 413: GPIOx->BRR = GPIO_Pin; 0x08001230 8501 STRH r1,[r0,#0x28] 414: } 0x08001232 4770 BX lr