08.07.2018, 14:43
|
|
Вид на жительство
Регистрация: 10.04.2010
Сообщений: 301
Сказал спасибо: 25
Сказали Спасибо 136 раз(а) в 79 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от 6ap6oc
|
Еще КУБ можно использовать как генератор семплов кода.
|
Не можно, а нужно, не надо слушать "гуру" которые ушли чуть дальше чем мигание светодиодиками.
Понятно, что очень неудобно когда генератор все сваливает в два файла stm32f4xx_hal_msp и stm32f4xx_it и еще в main, но инициализирует куб правильно и быстро. После генерации инициализации я исключаю эти файлы полностью, разбрасывая все по драйверам. Обработку прерывания легко переписать из кубовской в свою, хотя при всей его избыточности реально это бывает редко нужно - производительности процессора более чем достаточно, но на всякий случай у меня есть свои - так любимые антикубовцами с прямыми обращениями в регистры (я пользуюсь кубовскимим дефайнами - там все легко и просто и никаких раздутостей кода)
В результате после сбора соей платы со своей схемой вся периферия на ней у меня работает уже в этот же день, в отличие у антикубовцев, которые с гордостью потратят несколько часов на поиск в rm нужного флага в нужном регистре. Все остальное время трачу на саму программу, а не на вопросы "пачаму у меня не работает датчик, пачаму не работает SDкарта или флешка в USB"
Последний раз редактировалось dkm; 08.07.2018 в 14:54.
|
|
|
|
08.07.2018, 16:48
|
|
Вид на жительство
Регистрация: 03.10.2011
Сообщений: 485
Сказал спасибо: 35
Сказали Спасибо 234 раз(а) в 138 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от dkm
|
очень неудобно когда генератор все сваливает в два файла stm32f4xx_hal_msp и stm32f4xx_it и еще в main
|
Оно?
|
|
|
|
08.07.2018, 18:30
|
|
Вид на жительство
Регистрация: 10.04.2010
Сообщений: 301
Сказал спасибо: 25
Сказали Спасибо 136 раз(а) в 79 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от STM32F0
|
Судьба твоя такой - печальная, фекальная.
.....
Удачи, в твоём беспонтовом труде!
|
Мальчик, ты хам от рождения или просто идиот? Или мазахист и очень любишь когда тебя посылают на привычное для тебя место? Тебе же ясно сказали - адью, пацанчик. Не лезь в разговоры дядечек, олигофрен ты наш местный.
|
|
|
|
08.07.2018, 18:33
|
|
Вид на жительство
Регистрация: 10.04.2010
Сообщений: 301
Сказал спасибо: 25
Сказали Спасибо 136 раз(а) в 79 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Спасибо, возможно - не пробовал, но в любом случае придется код выковыривать и раскидывать по своим файлам, из одного места удобнее.
|
|
|
|
08.07.2018, 22:10
|
|
Вид на жительство
Регистрация: 10.04.2010
Сообщений: 301
Сказал спасибо: 25
Сказали Спасибо 136 раз(а) в 79 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от STM32F0
|
Всё? Спеклась ты тётенька?
|
Колхозник сляпал термометр на подобие елочной игрушки и загордился?
Знаешь, ты даже перестал вызывать раздражение, тебя просто жаль.
Но тем не менее, теперь уж пиши-непиши, прощай окончательно, с юродивыми не общаюсь.
|
|
|
|
09.07.2018, 06:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,901
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Халы-кубы-бла-бла-бла...
Вот лучше объясните мне, если такие умные, где у меня ошибка (ну кроме как в генах)))
Есть STM32L07х. Есть его встроенный EEPROM, запись в который стопорит обращение к флешу (гениально сделано ). Есть всего два включенных прерывания - Systick и USART1. На усарте висит SIM800C. Есть аппаратное управление потоком, но эксперимента ради оно отключено.
Хочется не терять данные, поступающие от модема, в т.ч. и когда пишется еепром. Для этого, как предложено в AN4808 ("Writing to non-volatile memory without disrupting code execution
on microcontrollers of the STM32L0 and STM32L1 Series") обработчики прерываний и функции, непосредственно выполняющие запись в еепром, размещены в ОЗУ (без колдунства со скаттером, штатным средством кейла попроще - свойствами *.c - файла. Таблица векторов прерываний, разумеется, тоже перенесена в озу, и в SCB-›VTOR тудой переназначена.
Обработчики прерываний и функции записи в еепром к флешу не обращаются, только к переменным в RAM и регистрам периферии.
И в дизасме и в мап-файле вижу, что все размещаемое в RAM действительно находится там. В pc адреса, соответствующие области ОЗУ, в дизасме даже ничего похожего на адреса флеша не вижу.
Тем не менее наблюдаю следующее: во время записи в первый банк еепром массива данных при наличии поступивших байтов по USART (например, URC) от модема взводится USART_ISR_ORE, то есть прерывание от USART вовремя не отработалось, и последующие данные потеряны.
Код обработчиков прерываний и функций, пишущих в EEPROM
PHP код:
|
void SysTick_Handler(void) { __set_systick_flag; }
void USART1_IRQHandler(void) { //С отключенной обработкой USART_ISR_ORE очень наглядно виснем, //пролюбив пришедший байт if (USART1-›ISR & USART_ISR_ORE) { USART1-›ICR |=USART_ICR_ORECF; }
if (USART1-›ISR & USART_ISR_RXNE) { ch_rx_buffer[u32_rx_wr_index++] = USART1-›RDR; if (u32_rx_wr_index == RX_BUFFER_SIZE) u32_rx_wr_index = 0; //RX_BUFFER_SIZE - дефайн, НЕ "const" u32_rx_counter++; } if (USART1-›ISR & USART_ISR_TXE) { // Не функция, дефайн битовой операции с переменной if (__get_gsm_status_outcoming_sms_downloading_flag) { if (outcoming_sms[u32_sms_tx_index]) { USART1-›TDR = outcoming_sms[u32_sms_tx_index++]; } else { USART1-›CR1 &= ~(USART_CR1_TXEIE); // Не функция, дефайн битовой операции с переменной __clear_gsm_status_outcoming_sms_downloading_flag; } } else { if (u32_tx_counter) { USART1-›TDR = ch_tx_buffer[u32_tx_rd_index++]; if (u32_tx_rd_index == TX_BUFFER_SIZE) u32_tx_rd_index = 0; //TX_BUFFER_SIZE - дефайн, НЕ "const" u32_tx_counter--; } else { USART1-›CR1 &= ~(USART_CR1_TXEIE); } } } }
void save_eeprom_u8_array (uint8_t *u8p_src, uint8_t *u8p_dst, uint8_t u8_length, uint8_t u8_zero_ended) { uint8_t u8_cnt; for (u8_cnt=0; u8_cnt‹u8_length; u8_cnt++) { while (FLASH-›SR & FLASH_SR_BSY){}; *(u8p_dst+u8_cnt) = *(u8p_src+u8_cnt); while (!(FLASH-›SR & FLASH_SR_EOP)){}; } if (u8_zero_ended) { while (FLASH-›SR & FLASH_SR_BSY){}; *(u8p_dst+u8_length) = 0; while (!(FLASH-›SR & FLASH_SR_EOP)){}; } while (FLASH-›SR & FLASH_SR_BSY){}; }
void save_eeprom_u8_value(uint8_t *u8p_dst, uint8_t u8_val) { while (FLASH-›SR & FLASH_SR_BSY){}; *(u8p_dst) = u8_val; while (!(FLASH-›SR & FLASH_SR_EOP)){}; while (FLASH-›SR & FLASH_SR_BSY){}; while (!(FLASH-›SR & FLASH_SR_READY)){}; }
void save_eeprom_u16_value(uint16_t *u16p_dst, uint16_t u16_val) { while (FLASH-›SR & FLASH_SR_BSY){}; *(u16p_dst) = u16_val; while (!(FLASH-›SR & FLASH_SR_EOP)){}; while (FLASH-›SR & FLASH_SR_BSY){}; }
void save_eeprom_u32_value(uint32_t *u32p_dst, uint32_t u32_val) { while (FLASH-›SR & FLASH_SR_BSY){}; *(u32p_dst) = u32_val; while (!(FLASH-›SR & FLASH_SR_EOP)){}; while (FLASH-›SR & FLASH_SR_BSY){}; }
|
Простыня дизасма под спойлером
Нажмите, чтобы открыть спойлер
PHP код:
|
9: __set_systick_flag; 0x20000100 4802 LDR r0,[pc,#8] ; @0x2000010C 0x20000102 2201 MOVS r2,#0x01 0x20000104 6801 LDR r1,[r0,#0x00] 0x20000106 4311 ORRS r1,r1,r2 0x20000108 6001 STR r1,[r0,#0x00] 10: } 11: 12: 13: void USART1_IRQHandler(void) 0x2000010A 4770 BX lr 0x2000010C 0350 LSLS r0,r2,#13 0x2000010E 2000 MOVS r0,#0x00 14: { 0x20000110 B5F0 PUSH {r4-r7,lr} 15: if (USART1-›ISR & USART_ISR_ORE) 16: { 0x20000112 4825 LDR r0,[pc,#148] ; @0x200001A8 0x20000114 69C1 LDR r1,[r0,#0x1C] 0x20000116 0709 LSLS r1,r1,#28 14: { 15: if (USART1-›ISR & USART_ISR_ORE) 16: { 0x20000118 D503 BPL 0x20000122 17: USART1-›ICR |=USART_ICR_ORECF; 18: } 19: 0x2000011A 6A01 LDR r1,[r0,#0x20] 0x2000011C 2208 MOVS r2,#0x08 0x2000011E 4311 ORRS r1,r1,r2 0x20000120 6201 STR r1,[r0,#0x20] 20: if (USART1-›ISR & USART_ISR_RXNE) 21: { 0x20000122 69C1 LDR r1,[r0,#0x1C] 0x20000124 2700 MOVS r7,#0x00 0x20000126 0689 LSLS r1,r1,#26 0x20000128 2900 CMP r1,#0x00 0x2000012A DA0E BGE 0x2000014A 22: ch_rx_buffer[u32_rx_wr_index++] = USART1-›RDR; 0x2000012C 6A43 LDR r3,[r0,#0x24] 0x2000012E 4A20 LDR r2,[pc,#128] ; @0x200001B0 0x20000130 4C1E LDR r4,[pc,#120] ; @0x200001AC 0x20000132 6811 LDR r1,[r2,#0x00] 0x20000134 5463 STRB r3,[r4,r1] 0x20000136 1C49 ADDS r1,r1,#1 23: if (u32_rx_wr_index == RX_BUFFER_SIZE) u32_rx_wr_index = 0; 0x20000138 2301 MOVS r3,#0x01 0x2000013A 02DB LSLS r3,r3,#11 0x2000013C 6011 STR r1,[r2,#0x00] 0x2000013E 4299 CMP r1,r3 0x20000140 D100 BNE 0x20000144 0x20000142 6017 STR r7,[r2,#0x00] 24: u32_rx_counter++; 25: } 26: 0x20000144 6851 LDR r1,[r2,#0x04] 0x20000146 1C49 ADDS r1,r1,#1 0x20000148 6051 STR r1,[r2,#0x04] 27: if (USART1-›ISR & USART_ISR_TXE) 28: { 0x2000014A 69C1 LDR r1,[r0,#0x1C] 0x2000014C 0609 LSLS r1,r1,#24 0x2000014E D50F BPL 0x20000170 29: if (__get_gsm_status_outcoming_sms_downloading_flag) 30: { 31: if (outcoming_sms[u32_sms_tx_index]) 32: { 33: USART1-›TDR = outcoming_sms[u32_sms_tx_index++]; 34: } 35: else 36: { 0x20000150 4D18 LDR r5,[pc,#96] ; @0x200001B4 37: USART1-›CR1 &= ~(USART_CR1_TXEIE); 0x20000152 2380 MOVS r3,#0x80 0x20000154 682A LDR r2,[r5,#0x00] 38: __clear_gsm_status_outcoming_sms_downloading_flag; 39: } 40: } 41: else 42: { 43: if (u32_tx_counter) 44: { 45: USART1-›TDR = ch_tx_buffer[u32_tx_rd_index++]; 46: if (u32_tx_rd_index == TX_BUFFER_SIZE) u32_tx_rd_index = 0; 47: u32_tx_counter--; 48: } 49: else 50: { 51: USART1-›CR1 &= ~(USART_CR1_TXEIE); 52: } 53: } 54: } 0x20000156 015E LSLS r6,r3,#5 29: if (__get_gsm_status_outcoming_sms_downloading_flag) 30: { 0x20000158 04D1 LSLS r1,r2,#19 0x2000015A 2900 CMP r1,#0x00 0x2000015C DA0E BGE 0x2000017C 31: if (outcoming_sms[u32_sms_tx_index]) 32: { 0x2000015E 4F17 LDR r7,[pc,#92] ; @0x200001BC 0x20000160 4915 LDR r1,[pc,#84] ; @0x200001B8 0x20000162 683C LDR r4,[r7,#0x00] 0x20000164 5D09 LDRB r1,[r1,r4] 0x20000166 2900 CMP r1,#0x00 0x20000168 D003 BEQ 0x20000172 33: USART1-›TDR = outcoming_sms[u32_sms_tx_index++]; 34: } 35: else 36: { 37: USART1-›CR1 &= ~(USART_CR1_TXEIE); 38: __clear_gsm_status_outcoming_sms_downloading_flag; 39: } 40: } 41: else 42: { 43: if (u32_tx_counter) 44: { 45: USART1-›TDR = ch_tx_buffer[u32_tx_rd_index++]; 46: if (u32_tx_rd_index == TX_BUFFER_SIZE) u32_tx_rd_index = 0; 47: u32_tx_counter--; 48: } 49: else 50: { 51: USART1-›CR1 &= ~(USART_CR1_TXEIE); 52: } 53: } 54: } 0x2000016A 6281 STR r1,[r0,#0x28] 0x2000016C 1C64 ADDS r4,r4,#1 0x2000016E 603C STR r4,[r7,#0x00] 55: } 0x20000170 BDF0 POP {r4-r7,pc} 37: USART1-›CR1 &= ~(USART_CR1_TXEIE); 38: __clear_gsm_status_outcoming_sms_downloading_flag; 39: } 40: } 41: else 42: { 0x20000172 6801 LDR r1,[r0,#0x00] 0x20000174 4399 BICS r1,r1,r3 0x20000176 6001 STR r1,[r0,#0x00] 0x20000178 43B2 BICS r2,r2,r6 0x2000017A E00E B 0x2000019A 43: if (u32_tx_counter) 44: { 0x2000017C 4D10 LDR r5,[pc,#64] ; @0x200001C0 0x2000017E 682A LDR r2,[r5,#0x00] 0x20000180 2A00 CMP r2,#0x00 0x20000182 D00C BEQ 0x2000019E 45: USART1-›TDR = ch_tx_buffer[u32_tx_rd_index++]; 0x20000184 4C10 LDR r4,[pc,#64] ; @0x200001C8 0x20000186 4B0F LDR r3,[pc,#60] ; @0x200001C4 0x20000188 6821 LDR r1,[r4,#0x00] 0x2000018A 5C5B LDRB r3,[r3,r1] 0x2000018C 6283 STR r3,[r0,#0x28] 0x2000018E 1C49 ADDS r1,r1,#1 46: if (u32_tx_rd_index == TX_BUFFER_SIZE) u32_tx_rd_index = 0; 47: u32_tx_counter--; 48: } 49: else 50: { 51: USART1-›CR1 &= ~(USART_CR1_TXEIE); 52: } 53: } 54: } 0x20000190 6021 STR r1,[r4,#0x00] 0x20000192 42B1 CMP r1,r6 0x20000194 D100 BNE 0x20000198 0x20000196 6027 STR r7,[r4,#0x00] 0x20000198 1E52 SUBS r2,r2,#1 38: __clear_gsm_status_outcoming_sms_downloading_flag; 39: } 40: } 41: else 42: { 43: if (u32_tx_counter) 44: { 45: USART1-›TDR = ch_tx_buffer[u32_tx_rd_index++]; 46: if (u32_tx_rd_index == TX_BUFFER_SIZE) u32_tx_rd_index = 0; 47: u32_tx_counter--; 48: } 49: else 50: { 51: USART1-›CR1 &= ~(USART_CR1_TXEIE); 52: } 53: } 54: } 0x2000019A 602A STR r2,[r5,#0x00] 55: } 0x2000019C BDF0 POP {r4-r7,pc} 51: USART1-›CR1 &= ~(USART_CR1_TXEIE); 52: } 53: } 54: } 0x2000019E 6801 LDR r1,[r0,#0x00] 0x200001A0 4399 BICS r1,r1,r3 0x200001A2 6001 STR r1,[r0,#0x00] 55: } 0x200001A4 BDF0 POP {r4-r7,pc} 0x200001A6 0000 MOVS r0,r0 0x200001A8 3800 SUBS r0,r0,#0x00 0x200001AA 4001 ANDS r1,r1,r0 0x200001AC 2CDA CMP r4,#0xDA 0x200001AE 2000 MOVS r0,#0x00 0x200001B0 0384 LSLS r4,r0,#14 0x200001B2 2000 MOVS r0,#0x00 0x200001B4 02D4 LSLS r4,r2,#11 0x200001B6 2000 MOVS r0,#0x00 0x200001B8 1BDD SUBS r5,r3,r7 0x200001BA 2000 MOVS r0,#0x00 0x200001BC 0270 LSLS r0,r6,#9 0x200001BE 2000 MOVS r0,#0x00 0x200001C0 027C LSLS r4,r7,#9 0x200001C2 2000 MOVS r0,#0x00 0x200001C4 0390 LSLS r0,r2,#14 0x200001C6 2000 MOVS r0,#0x00 0x200001C8 0284 LSLS r4,r0,#10 0x200001CA 2000 MOVS r0,#0x00 87: while (FLASH-›SR & FLASH_SR_BSY){}; 0x200001CC 4A05 LDR r2,[pc,#20] ; @0x200001E4 0x200001CE 6993 LDR r3,[r2,#0x18] 0x200001D0 07DB LSLS r3,r3,#31 0x200001D2 D1FC BNE 0x200001CE 88: *(u16p_dst) = u16_val; 0x200001D4 8001 STRH r1,[r0,#0x00] 89: while (!(FLASH-›SR & FLASH_SR_EOP)){}; 0x200001D6 6990 LDR r0,[r2,#0x18] 0x200001D8 0780 LSLS r0,r0,#30 0x200001DA D5FC BPL 0x200001D6 90: while (FLASH-›SR & FLASH_SR_BSY){}; 0x200001DC 6990 LDR r0,[r2,#0x18] 0x200001DE 07C0 LSLS r0,r0,#31 0x200001E0 D1FC BNE 0x200001DC 91: } 92: 93: void save_eeprom_u32_value(uint32_t *u32p_dst, uint32_t u32_val) 94: { 0x200001E2 4770 BX lr 0x200001E4 2000 MOVS r0,#0x00 0x200001E6 4002 ANDS r2,r2,r0 95: while (FLASH-›SR & FLASH_SR_BSY){}; 0x200001E8 4A05 LDR r2,[pc,#20] ; @0x20000200 0x200001EA 6993 LDR r3,[r2,#0x18] 0x200001EC 07DB LSLS r3,r3,#31 0x200001EE D1FC BNE 0x200001EA 96: *(u32p_dst) = u32_val; 0x200001F0 6001 STR r1,[r0,#0x00] 97: while (!(FLASH-›SR & FLASH_SR_EOP)){}; 0x200001F2 6990 LDR r0,[r2,#0x18] 0x200001F4 0780 LSLS r0,r0,#30 0x200001F6 D5FC BPL 0x200001F2 98: while (FLASH-›SR & FLASH_SR_BSY){}; 0x200001F8 6990 LDR r0,[r2,#0x18] 0x200001FA 07C0 LSLS r0,r0,#31 0x200001FC D1FC BNE 0x200001F8 99: } 0x200001FE 4770 BX lr 0x20000200 2000 MOVS r0,#0x00 0x20000202 4002 ANDS r2,r2,r0 59: { 60: uint8_t u8_cnt; 0x20000204 B570 PUSH {r4-r6,lr} 61: for (u8_cnt=0; u8_cnt‹u8_length; u8_cnt++) 62: { 0x20000206 2400 MOVS r4,#0x00 63: while (FLASH-›SR & FLASH_SR_BSY){}; 0x20000208 4D0D LDR r5,[pc,#52] ; @0x20000240 59: { 60: uint8_t u8_cnt; 61: for (u8_cnt=0; u8_cnt‹u8_length; u8_cnt++) 62: { 63: while (FLASH-›SR & FLASH_SR_BSY){}; 0x2000020A E009 B 0x20000220 0x2000020C 69AE LDR r6,[r5,#0x18] 0x2000020E 07F6 LSLS r6,r6,#31 0x20000210 D1FC BNE 0x2000020C 64: *(u8p_dst+u8_cnt) = *(u8p_src+u8_cnt); 0x20000212 5D06 LDRB r6,[r0,r4] 0x20000214 550E STRB r6,[r1,r4] 65: while (!(FLASH-›SR & FLASH_SR_EOP)){}; 66: } 0x20000216 69AE LDR r6,[r5,#0x18] 0x20000218 07B6 LSLS r6,r6,#30 0x2000021A D5FC BPL 0x20000216 0x2000021C 1C64 ADDS r4,r4,#1 61: for (u8_cnt=0; u8_cnt‹u8_length; u8_cnt++) 62: { 63: while (FLASH-›SR & FLASH_SR_BSY){}; 64: *(u8p_dst+u8_cnt) = *(u8p_src+u8_cnt); 65: while (!(FLASH-›SR & FLASH_SR_EOP)){}; 66: } 0x2000021E B2E4 UXTB r4,r4 0x20000220 4294 CMP r4,r2 0x20000222 D3F3 BCC 0x2000020C 67: if (u8_zero_ended) 68: { 0x20000224 2B00 CMP r3,#0x00 0x20000226 D006 BEQ 0x20000236 69: while (FLASH-›SR & FLASH_SR_BSY){}; 0x20000228 69A8 LDR r0,[r5,#0x18] 0x2000022A 07C0 LSLS r0,r0,#31 0x2000022C D1FC BNE 0x20000228 70: *(u8p_dst+u8_length) = 0; 0x2000022E 5488 STRB r0,[r1,r2] 71: while (!(FLASH-›SR & FLASH_SR_EOP)){}; 72: } 0x20000230 69A8 LDR r0,[r5,#0x18] 0x20000232 0780 LSLS r0,r0,#30 0x20000234 D5FC BPL 0x20000230 73: while (FLASH-›SR & FLASH_SR_BSY){}; 0x20000236 69A8 LDR r0,[r5,#0x18] 0x20000238 07C0 LSLS r0,r0,#31 0x2000023A D1FC BNE 0x20000236 74: } 75: 76: void save_eeprom_u8_value(uint8_t *u8p_dst, uint8_t u8_val) 77: { 0x2000023C BD70 POP {r4-r6,pc} 0x2000023E 0000 MOVS r0,r0 0x20000240 2000 MOVS r0,#0x00 0x20000242 4002 ANDS r2,r2,r0 78: while (FLASH-›SR & FLASH_SR_BSY){}; 0x20000244 4A07 LDR r2,[pc,#28] ; @0x20000264 0x20000246 6993 LDR r3,[r2,#0x18] 0x20000248 07DB LSLS r3,r3,#31 0x2000024A D1FC BNE 0x20000246 79: *(u8p_dst) = u8_val; 0x2000024C 7001 STRB r1,[r0,#0x00] 80: while (!(FLASH-›SR & FLASH_SR_EOP)){}; 0x2000024E 6990 LDR r0,[r2,#0x18] 0x20000250 0780 LSLS r0,r0,#30 0x20000252 D5FC BPL 0x2000024E 81: while (FLASH-›SR & FLASH_SR_BSY){}; 0x20000254 6990 LDR r0,[r2,#0x18] 0x20000256 07C0 LSLS r0,r0,#31 0x20000258 D1FC BNE 0x20000254 82: while (!(FLASH-›SR & FLASH_SR_READY)){}; 0x2000025A 6990 LDR r0,[r2,#0x18] 0x2000025C 0700 LSLS r0,r0,#28 0x2000025E D5FC BPL 0x2000025A 83: } 0x20000260 4770 BX lr
|
Проверки всевозможных битов состояния, которые натыканы где надо и где не надо в коде уже "от отчаяния" - не помогают нисколько. Барьеры тоже все и везде перепробовал)))
Ничо не понимаю. При обращении на запись к еепрому программа точно выполняется из ОЗУ. При вызове обработчиков усарта и систика тоже. Таблица векторов в озу содержит правильные адреса обработчиков. VTOR содержит правильный адрес таблицы. Ядро в Thread mode. Функции записи вызываются не в прерывании. Чего этой скотине не хватает?!
В принципе жить можно и так (включив CTS/RTS, получаем благопристойное ожидание модемом, когда его величество USART соизволит принять байт), но... неаккуратненько как-то! (с)
Хотелось бы сохранить работоспособность и при отсутствии возможности использовать управление потоком (Xon/Xoff не предлагать))
Последний раз редактировалось AR_Favorit; 19.07.2018 в 07:46.
|
|
|
|
09.07.2018, 10:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,901
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от STM32F0
|
Разве?
|
В каждом банке - половина имеющегося флеша и половина имеющегося EEPROM.
Стопорится при записи в половину еепром, находящуюся в том же банке,что и та половина флеш, из которой выполняется код, разумеется.
Цитата:
|
When the code is executing from the Flash program memory, the instruction must be read
from it, this is not possible during a write operation on any memory block of the same bank.
In such case the program execution stalls during the EEPROM data write.
|
PS к тому же не все L-ки имеют два банка...
Последний раз редактировалось AR_Favorit; 09.07.2018 в 10:16.
|
|
|
|
16.07.2018, 13:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Столкнулся с непонятным поведением STM32F042: в двух изделиях (паяно криво, да, больше этому человеку платы паять не буду поручать) МК прошивается без ошибок через DFU или UART1, но при этом не инициализируется (т.е. после того, как нажмешь reset, грузится опять бутлоадер DFU!).
Кварц не используется. Нога boot не закорочена. Из-за чего может быть такое странное поведение? Выгорело что-то при пайке чипа?
__________________
Смерть бандеровской мразоте!
|
|
|
|
16.07.2018, 13:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.02.2005
Адрес: Минск, Беларусь
Сообщений: 7,780
Сказал спасибо: 2,671
Сказали Спасибо 2,645 раз(а) в 1,953 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от eddy
|
Нога boot не закорочена
|
Уверены? А если ее отпаять и подтянуть внешним резистором куда нужно?
Или - попробовать перепаять эту же микросхему заново.
Встречались такие пайки, что удивлялся ловкости паяльщиков, которые смогли запаять так, что снаружи сопля совсем незаметна, и только перепайка помогала.
|
|
|
|
16.07.2018, 14:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Yuri222
|
Уверены?
|
Да, прозвонил несколько раз: все ОК, в нормальном режиме подтянуто 10-кОмным резистором к земле, при нажатии кнопки boot подтягивается к питанию.
Сообщение от Yuri222
|
Или - попробовать перепаять эту же микросхему заново.
|
Вот у меня подозрение, что при пайке пережгли микросхему.
Одну плату, кстати, почти реанимировал: при тщательном рассмотрении оказалось, что нога boot болтается в воздухе, т.к. второй конец подтяжки на землю не был припаян! Но и после подпайки фигня какая-то: горит светодиод, который гореть не должен, а в uart постоянно идет сообщение, которое выдается при инициализации МК. Хотя heartbit светодиод как положено мыргает 1 раз в секунду... НĒХ какая-то!
Сообщение от Yuri222
|
Встречались такие пайки
|
Да я сейчас в лупу рассмотрел, что у большинства разъемов земля не пропаяна (а внешне вроде как капля припоя есть), то-то у меня датчики глючили через раз...
__________________
Смерть бандеровской мразоте!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:24.
|
|