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