Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 08.07.2018, 14:43  
dkm
Вид на жительство
 
Регистрация: 10.04.2010
Сообщений: 301
Сказал спасибо: 25
Сказали Спасибо 136 раз(а) в 79 сообщении(ях)
dkm на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от 6ap6oc Посмотреть сообщение
Еще КУБ можно использовать как генератор семплов кода.
Не можно, а нужно, не надо слушать "гуру" которые ушли чуть дальше чем мигание светодиодиками.
Понятно, что очень неудобно когда генератор все сваливает в два файла stm32f4xx_hal_msp и stm32f4xx_it и еще в main, но инициализирует куб правильно и быстро. После генерации инициализации я исключаю эти файлы полностью, разбрасывая все по драйверам. Обработку прерывания легко переписать из кубовской в свою, хотя при всей его избыточности реально это бывает редко нужно - производительности процессора более чем достаточно, но на всякий случай у меня есть свои - так любимые антикубовцами с прямыми обращениями в регистры (я пользуюсь кубовскимим дефайнами - там все легко и просто и никаких раздутостей кода)
В результате после сбора соей платы со своей схемой вся периферия на ней у меня работает уже в этот же день, в отличие у антикубовцев, которые с гордостью потратят несколько часов на поиск в rm нужного флага в нужном регистре. Все остальное время трачу на саму программу, а не на вопросы "пачаму у меня не работает датчик, пачаму не работает SDкарта или флешка в USB"
Реклама:

Последний раз редактировалось dkm; 08.07.2018 в 14:54.
dkm вне форума  
Непрочитано 08.07.2018, 16:48  
Serg3301
Вид на жительство
 
Регистрация: 03.10.2011
Сообщений: 485
Сказал спасибо: 35
Сказали Спасибо 234 раз(а) в 138 сообщении(ях)
Serg3301 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от dkm Посмотреть сообщение
очень неудобно когда генератор все сваливает в два файла stm32f4xx_hal_msp и stm32f4xx_it и еще в main
Оно?

Нажмите на изображение для увеличения
Название: Снимок экрана от 2018-07-08 15-41-48.png
Просмотров: 0
Размер:	47.9 Кб
ID:	130673
Serg3301 вне форума  
Непрочитано 08.07.2018, 18:30  
dkm
Вид на жительство
 
Регистрация: 10.04.2010
Сообщений: 301
Сказал спасибо: 25
Сказали Спасибо 136 раз(а) в 79 сообщении(ях)
dkm на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от STM32F0 Посмотреть сообщение
Судьба твоя такой - печальная, фекальная.
.....
Удачи, в твоём беспонтовом труде!
Мальчик, ты хам от рождения или просто идиот? Или мазахист и очень любишь когда тебя посылают на привычное для тебя место? Тебе же ясно сказали - адью, пацанчик. Не лезь в разговоры дядечек, олигофрен ты наш местный.
dkm вне форума  
Непрочитано 08.07.2018, 18:33  
dkm
Вид на жительство
 
Регистрация: 10.04.2010
Сообщений: 301
Сказал спасибо: 25
Сказали Спасибо 136 раз(а) в 79 сообщении(ях)
dkm на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Serg3301 Посмотреть сообщение
Оно?

Вложение 130673
Спасибо, возможно - не пробовал, но в любом случае придется код выковыривать и раскидывать по своим файлам, из одного места удобнее.
dkm вне форума  
Непрочитано 08.07.2018, 22:10  
dkm
Вид на жительство
 
Регистрация: 10.04.2010
Сообщений: 301
Сказал спасибо: 25
Сказали Спасибо 136 раз(а) в 79 сообщении(ях)
dkm на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от STM32F0 Посмотреть сообщение
Всё? Спеклась ты тётенька?
Колхозник сляпал термометр на подобие елочной игрушки и загордился?
Знаешь, ты даже перестал вызывать раздражение, тебя просто жаль.
Но тем не менее, теперь уж пиши-непиши, прощай окончательно, с юродивыми не общаюсь.
dkm вне форума  
Непрочитано 09.07.2018, 06:39  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,901
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию 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_SIZEu32_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_SIZEu32_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_srcuint8_t *u8p_dst
uint8_t u8_lengthuint8_t u8_zero_ended)
{
    
uint8_t u8_cnt;
    for (
u8_cnt=0u8_cntu8_lengthu8_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_dstuint8_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_dstuint16_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_dstuint32_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:  
    
13void 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_SIZEu32_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_SIZEu32_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_SIZEu32_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_SIZEu32_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_SIZEu32_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:  
    
93void save_eeprom_u32_value(uint32_t *u32p_dstuint32_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=0u8_cntu8_lengthu8_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=0u8_cntu8_lengthu8_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=0u8_cntu8_lengthu8_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:  
    
76void save_eeprom_u8_value(uint8_t *u8p_dstuint8_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.
AR_Favorit вне форума  
Непрочитано 09.07.2018, 10:03  
AR_Favorit
Почётный гражданин KAZUS.RU
 
Регистрация: 13.03.2010
Сообщений: 2,901
Сказал спасибо: 499
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
AR_Favorit на пути к лучшему
По умолчанию 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.
AR_Favorit вне форума  
Непрочитано 16.07.2018, 13:00  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Столкнулся с непонятным поведением STM32F042: в двух изделиях (паяно криво, да, больше этому человеку платы паять не буду поручать) МК прошивается без ошибок через DFU или UART1, но при этом не инициализируется (т.е. после того, как нажмешь reset, грузится опять бутлоадер DFU!).
Кварц не используется. Нога boot не закорочена. Из-за чего может быть такое странное поведение? Выгорело что-то при пайке чипа?
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 16.07.2018, 13:36  
Yuri222
Почётный гражданин KAZUS.RU
 
Регистрация: 08.02.2005
Адрес: Минск, Беларусь
Сообщений: 7,742
Сказал спасибо: 2,658
Сказали Спасибо 2,622 раз(а) в 1,939 сообщении(ях)
Yuri222 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от eddy Посмотреть сообщение
Нога boot не закорочена
Уверены? А если ее отпаять и подтянуть внешним резистором куда нужно?
Или - попробовать перепаять эту же микросхему заново.
Встречались такие пайки, что удивлялся ловкости паяльщиков, которые смогли запаять так, что снаружи сопля совсем незаметна, и только перепайка помогала.
Yuri222 вне форума  
Непрочитано 16.07.2018, 14:26  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Yuri222 Посмотреть сообщение
Уверены?
Да, прозвонил несколько раз: все ОК, в нормальном режиме подтянуто 10-кОмным резистором к земле, при нажатии кнопки boot подтягивается к питанию.
Сообщение от Yuri222 Посмотреть сообщение
Или - попробовать перепаять эту же микросхему заново.
Вот у меня подозрение, что при пайке пережгли микросхему.
Одну плату, кстати, почти реанимировал: при тщательном рассмотрении оказалось, что нога boot болтается в воздухе, т.к. второй конец подтяжки на землю не был припаян! Но и после подпайки фигня какая-то: горит светодиод, который гореть не должен, а в uart постоянно идет сообщение, которое выдается при инициализации МК. Хотя heartbit светодиод как положено мыргает 1 раз в секунду... НĒХ какая-то!
Сообщение от Yuri222 Посмотреть сообщение
Встречались такие пайки
Да я сейчас в лупу рассмотрел, что у большинства разъемов земля не пропаяна (а внешне вроде как капля припоя есть), то-то у меня датчики глючили через раз...
__________________
Смерть бандеровской мразоте!
eddy вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 01:08.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot