Easyelectronics.ru

Электроника для всех
Текущее время: 05 июн 2020, 15:42

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 45 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 28 мар 2020, 23:57 
Заглядывает иногда

Зарегистрирован: 07 июн 2016, 19:24
Сообщения: 123
Приветствую!

Не получается завести данную флеш на регистрах :( На HAL запустилась сразу (т.е. сама микруха рабочая). Флеш висит на SPI2, CS - программный.
Код:
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
    RCC->APB1ENR |= RCC_APB1ENR_SPI2EN;
    delay_us(100);

// Настройка пинов интерфейса SPI (GPIOB_11 - программный CS):
    GPIOB->MODER    &= ~GPIO_MODER_MODE15 & ~GPIO_MODER_MODE14 &
                                     ~GPIO_MODER_MODE13 & ~GPIO_MODER_MODE11;
    GPIOB->MODER    |= GPIO_MODER_MODE15_1 | GPIO_MODER_MODE14_1 |
                                    GPIO_MODER_MODE13_1 | GPIO_MODER_MODE11_0;
    GPIOB->OSPEEDR  |= GPIO_OSPEEDR_OSPEED15 | GPIO_OSPEEDR_OSPEED14 |
                                     GPIO_MODER_MODE13 | GPIO_MODER_MODE11;
   
    GPIOB->AFR[1]   &= ~GPIO_AFRH_AFSEL15 & ~GPIO_AFRH_AFSEL14 & ~GPIO_AFRH_AFSEL13;
    GPIOB->AFR[1]   |= GPIO_AFRH_AFSEL15_2 | GPIO_AFRH_AFSEL15_0 |
                                  GPIO_AFRH_AFSEL14_2 | GPIO_AFRH_AFSEL14_0 |
                                  GPIO_AFRH_AFSEL13_2 | GPIO_AFRH_AFSEL13_0;
   
    GPIOB->PUPDR    &= ~GPIO_PUPDR_PUPD13 & ~GPIO_PUPDR_PUPD11;
    GPIOB->PUPDR    |= GPIO_PUPDR_PUPD13_1 | GPIO_PUPDR_PUPD11_0;
   
    GPIOB->BSRR = GPIO_BSRR_BS11;
   
// Настройка SPI:
    // Мастер, 2-line, 8-bit, 0-0 мод:
    SPI2->CR1 = SPI_CR1_MSTR;       
    SPI2->CR1 &= ~SPI_CR1_DFF;
    SPI2->CR1 &= ~SPI_CR1_CPOL;
    SPI2->CR1 &= ~SPI_CR1_CPHA;

    // Программный CS, ~1,3 МГц, MSB первый:
    SPI2->CR1 |= SPI_CR1_SSM;
    SPI2->CR1 |= SPI_CR1_SSI;
    SPI2->CR1 |= SPI_CR1_BR_1 | SPI_CR1_BR_0; // ~21/16 МГц
    SPI2->CR1 &= ~SPI_CR1_LSBFIRST;
   
    SPI2->CR2 = 0;
   
    SPI2->CR1 |= SPI_CR1_SPE;
   
    delay_s(1);

// Работа с  M25P80:
    // Разрешение записи (команда 0х06):
    GPIOB->BSRR = GPIO_BSRR_BR11;
        while (!(SPI2->SR & SPI_SR_TXE)) {}
        SPI2->DR = 0x06;
    GPIOB->BSRR = GPIO_BSRR_BS11;
           
    // Запись data_T по адресу 0х010203:
    GPIOB->BSRR = GPIO_BSRR_BR11;
        while (!(SPI2->SR & SPI_SR_TXE)) {}
        SPI2->DR = 0x02; // команда "page program"
           
        // Передача адреса:
        while (!(SPI2->SR & SPI_SR_TXE)) {}
        SPI2->DR = 0x01;
        while (!(SPI2->SR & SPI_SR_TXE)) {}
        SPI2->DR = 0x02;
        while (!(SPI2->SR & SPI_SR_TXE)) {}
        SPI2->DR = 0x03;   
           
        // Запись байта data_T = 0х05:
        while (!(SPI2->SR & SPI_SR_TXE)) {}
        SPI2->DR = data_T;
    GPIOB->BSRR = GPIO_BSRR_BS11;

    GPIOB->BSRR = GPIO_BSRR_BS4; // зажечь диод (нет зависания)
    delay_s(1);
           
    // Чтение байта по адресу 0х010203:
    GPIOB->BSRR = GPIO_BSRR_BR11;
        while (!(SPI2->SR & SPI_SR_TXE)) {}
        SPI2->DR = 0x03; // команда "read data bytes"
           
        // Передача адреса:
        while (!(SPI2->SR & SPI_SR_TXE)) {}
        SPI2->DR = 0x01;
        while (!(SPI2->SR & SPI_SR_TXE)) {}
        SPI2->DR = 0x02;
        while (!(SPI2->SR & SPI_SR_TXE)) {}
        SPI2->DR = 0x03;
               
        // Запись считанного байта в data_R
        while (!(SPI2->SR & SPI_SR_RXNE)) {}
        data_R = SPI2->DR;
    GPIOB->BSRR = GPIO_BSRR_BS11;
         
    GPIOB->BSRR = GPIO_BSRR_BR4; // погасить диод (нет зависания)
    delay_s(1);
       
    // Проверка считанного байта :
    if (data_R == data_T)
    {
        GPIOB->BSRR = GPIO_BSRR_BS4; // зажечь диод
    }

В общем, data_R всегда равна 0. Во время отладки вообще не видно данных в SPI2->DR, т.е. там всегда 0. При этом SPI_CR1_SPE активен. В чём может быть дело?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 09:24 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1477
PriZraK писал(а):
Не получается завести данную флеш на регистрах :(
Вы ещё не готовы к "на регистрах".

PriZraK писал(а):
На HAL запустилась сразу (т.е. сама микруха рабочая).
Ну так и пишите лучше на HAL, чем подобный говнокод. Даже руки опускаются такое проверять. :(

Ну вот что это?
Код:
// Настройка SPI:
    // Мастер, 2-line, 8-bit, 0-0 мод:
    SPI2->CR1 = SPI_CR1_MSTR;       
    SPI2->CR1 &= ~SPI_CR1_DFF;
    SPI2->CR1 &= ~SPI_CR1_CPOL;
    SPI2->CR1 &= ~SPI_CR1_CPHA;

    // Программный CS, ~1,3 МГц, MSB первый:
    SPI2->CR1 |= SPI_CR1_SSM;
    SPI2->CR1 |= SPI_CR1_SSI;
    SPI2->CR1 |= SPI_CR1_BR_1 | SPI_CR1_BR_0; // ~21/16 МГц
    SPI2->CR1 &= ~SPI_CR1_LSBFIRST;
   
    SPI2->CR2 = 0;
   
    SPI2->CR1 |= SPI_CR1_SPE;
Даже по формальному признаку 2,3,4 и 8 команды тупо ничего не делают. Во-первых, в CR1 и так ноль при включении. Во-вторых, первая же команда зануляет все биты кроме SPI_CR1_MSTR. Потом, зачем тут SSM и SSI? CR2 опять таки при старте 0 по умолчанию. В результате вся инициализация SPI вырождается в одну команду.
Код:
SPI2->CR1 = SPI_CR1_MSTR | _VAL2FLD(SPI_CR1_BR,3) | SPI_CR1_SPE;


И давай сравним листинги
Код:
//SPI2->CR1 = SPI_CR1_MSTR;
        LDR.N    R0,??DataTable1  ;; 0x40003800
        MOVS     R1,#+4
        STR      R1,[R0, #+0]
//SPI2->CR1 &= ~SPI_CR1_DFF;
        LDR      R2,[R0, #+0]
        BIC      R2,R2,#0x800
        STR      R2,[R0, #+0]
//SPI2->CR1 &= ~SPI_CR1_CPOL;
        LDR      R3,[R0, #+0]
        BIC      R3,R3,#0x2
        STR      R3,[R0, #+0]
//SPI2->CR1 &= ~SPI_CR1_CPHA;
        LDR      R1,[R0, #+0]
        LSRS     R1,R1,#+1
        LSLS     R1,R1,#+1
        STR      R1,[R0, #+0]
//SPI2->CR1 |= SPI_CR1_SSM;
        LDR      R2,[R0, #+0]
        ORR      R2,R2,#0x200
        STR      R2,[R0, #+0]
//SPI2->CR1 |= SPI_CR1_SSI;
        LDR      R1,[R0, #+0]
        ORR      R1,R1,#0x100
        STR      R1,[R0, #+0]
//SPI2->CR1 |= SPI_CR1_BR_1 | SPI_CR1_BR_0; // ~21/16 МГц
        LDR      R2,[R0, #+0]
        ORR      R2,R2,#0x18
        STR      R2,[R0, #+0]
//SPI2->CR1 &= ~SPI_CR1_LSBFIRST;
        LDR      R1,[R0, #+0]
        BIC      R1,R1,#0x80
        STR      R1,[R0, #+0]
//SPI2->CR2 = 0;
        MOVS     R2,#+0
        STR      R2,[R0, #+4]
//SPI2->CR1 |= SPI_CR1_SPE;
        LDR      R1,[R0, #+0]
        ORR      R1,R1,#0x40
        STR      R1,[R0, #+0]

Код:
//SPI2->CR1 = SPI_CR1_MSTR | _VAL2FLD(SPI_CR1_BR,3) | SPI_CR1_SPE; 
        LDR.N    R1,??DataTable1  ;; 0x40003800
        MOVS     R0,#+92
        STR      R0,[R1, #+0]

Разница ровно в 10 раз! На порядок, Карл! Вот для чего пишут "на регистрах". Чтобы быть лучше HAL, а не наоборот.

----------------- Добавлено -------------
Всё же решил посмотреть дальше. Это в принципе не будет работать. Самое начало.
Код:
// Работа с  M25P80:
    // Разрешение записи (команда 0х06):
    GPIOB->BSRR = GPIO_BSRR_BR11;
        while (!(SPI2->SR & SPI_SR_TXE)) {}
        SPI2->DR = 0x06;
    GPIOB->BSRR = GPIO_BSRR_BS11;
CS возвращается в "1" раньше чем на шине что-то появится. Дальше смотреть бессмысленно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 11:06 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Интересно, откуда люди массово нахватались этих вот построчных раздельных операций с отдельными битами в регистре? Уже не первый раз вижу это у разных людей, только понять не могу, откуда оно есть пошло именно в таком виде? Это ж стопудово афтар какого-нить "видеоурока по СТМ" придумал, так сказать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 13:14 
Заглядывает иногда

Зарегистрирован: 07 июн 2016, 19:24
Сообщения: 123
Цитата:
Разница ровно в 10 раз!

Началось, бляддддььь…. да мне насрать сейчас на быстродействие! Ясен хер, что это можно переписать в одну строчку. Специально разбил всё по строкам, чтобы ничего не пропустить (так сейчас удобней). Какая разница, как происходит инициализация при тестировании??? Главное, чтобы заработало!
Цитата:
даже по формальному признаку 2,3,4 и 8 команды тупо ничего не делают.

Я знаю, что они ничего не делают, но режимы могут быть разными (16 бит, 1-1 мод) и тогда 2, 3 и 4 будут единицами.
Цитата:
Потом, зачем тут SSM и SSI?

Мануал почитай. Без этого программный CS работать не будет, а в статуснике выдаст Mode fault.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 13:52 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1477
PriZraK писал(а):
да мне насрать сейчас на быстродействие!
Точно так же как насрать на нас. Нам в этом дерьме разбираться?

PriZraK писал(а):
Мануал почитай. Без этого программный CS работать не будет
Ногодрыг не будет работать? Ну это сказки.

PriZraK писал(а):
а в статуснике выдаст Mode fault.
Тогда уж логичнее SSOE поставить, чтобы не было потуг в Slave уйти.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 14:04 
Старожил

Зарегистрирован: 05 фев 2019, 23:50
Сообщения: 471
Откуда: Камчатка
VladislavS писал(а):
PriZraK писал(а):
да мне насрать сейчас на быстродействие!
Точно так же как насрать на нас. Нам в этом дерьме разбираться?

PriZraK писал(а):
Мануал почитай. Без этого программный CS работать не будет
Ногодрыг не будет работать? Ну это сказки.

PriZraK писал(а):
а в статуснике выдаст Mode fault.
Тогда уж логичнее SSOE поставить, чтобы не было потуг в Slave уйти.


Интересно, почитал, как ни странно для себя ,но кое-что понял.
STM32, вообще незнаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 14:25 
Заглядывает иногда

Зарегистрирован: 07 июн 2016, 19:24
Сообщения: 123
Цитата:
Точно так же как насрать на нас. Нам в этом дерьме разбираться?

Как раз наоборот: построчная запись установки регистра удобней для чтения, чем сразу всё написать.
Т.е. при такой записи легче найти ошибку:
Код:
SPI2->CR1 = SPI_CR1_MSTR;
SPI2->CR1 |= SPI_CR1_BR_1 | SPI_CR1_BR_0;
SPI2->CR1 |= SPI_CR1_SPE;

Чем так:
Код:
SPI2->CR1 = SPI_CR1_MSTR | _VAL2FLD(SPI_CR1_BR,3) | SPI_CR1_SPE;

Цитата:
Тогда уж логичнее SSOE поставить

Да, так тоже можно. Но почему логичнее? Ведь по факту получается программное управление NSS, а для программного управления SSM = 1.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 14:39 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1477
PriZraK писал(а):
Но почему логичнее?
Ты же master и в slave переход не подразумевается. NSS на вход как раз не логично. А CS вообще ногодрыгом делаешь.

PriZraK писал(а):
Ведь по факту получается программное управление NSS,
И где ты им управляешь? Ну кроме инициализации.

PriZraK писал(а):
а для программного управления SSM = 1.
Да, SSM=SSI=1 будет работать. Проблема не тут. У тебя CS с передаваемыми/принимаемыми данными "не дружит".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 14:39 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Тем не менее, вам это не помогает найти ошибку...
Построчно можно и вот так писать:
Код:
SPI2->CR1 = SPI_CR1_MSTR |                 // Master
            SPI_CR1_BR_1 | SPI_CR1_BR_0 |  // Скорость
            SPI_CR1_SPE;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 14:48 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4787
Откуда: Кемеровская область, Киселевск
BusMaster зачем коменты на разных языках?

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 14:50 
Заглядывает иногда

Зарегистрирован: 07 июн 2016, 19:24
Сообщения: 123
Потому что ошибка точно не в инициализации SPI, а в
Цитата:
У тебя CS с передаваемыми/принимаемыми данными "не дружит".

Вот это я как раз и не пойму.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 14:54 
Старожил

Зарегистрирован: 05 фев 2019, 23:50
Сообщения: 471
Откуда: Камчатка
Oxford писал(а):
BusMaster зачем коменты на разных языках?

Извиняюсь ,что вклиниваюсь.
Вопрос возник нежданно.
Вот с такой инициализацией в AVR и делать нечего.
У меня сложилось такое впечатление , что STM32, сам моет ,сам стирает и даже отсасывет?


Последний раз редактировалось igarr 29 мар 2020, 15:12, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 14:55 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
:)) мои комменты - как хочу, так и пешу :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 15:03 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1477
PriZraK писал(а):
Вот это я как раз и не пойму.
Ну а чего тут понимать. Ты пишешь в DR и сразу делаешь СS=1, причём не один раз по коду. А время на передачу данных из DR в сдвиговый регистр и затем в линию кто будет давать? Логический анализатор бы в линию - это сильно облегчит жизнь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 15:14 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Перед поднятием CS надо хотябы ожидать исчезновения бита BSY.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 15:48 
Заглядывает иногда

Зарегистрирован: 07 июн 2016, 19:24
Сообщения: 123
Да, проблема в правильности блока. BSY, кстати, ST не рекомендуют, но с ним тоже не работает. Не понимаю, почему SPI флаг TXE не опускает при записи данных в регистр (SPI2->DR = 0x06;). Проверка же совсем простая должна быть (while (!(SPI2->SR & SPI_SR_TXE)) {}) Т.е. записали байт - TXE упал, подождали, когда он уйдёт из буфера передачи TX (TXE установится в 1) - всё! Но это не работает...
Код:
    GPIOB->BSRR = GPIO_BSRR_BR11;         // сброс CS
        SPI2->DR = 0x06;                              // записать данные
        while (!(SPI2->SR & SPI_SR_TXE)) {}  // ждём, пока данные передадутся
    GPIOB->BSRR = GPIO_BSRR_BS11;         // установка CS

Вместо этого в отладке поднимает RXNE...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 15:53 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1477
TXE значит что DR свободен. Он между байтами в пределах одного CS работает. Конец посылки по RXNE отслеживаем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 18:41 
Старожил
Аватара пользователя

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 804
https://bitbucket.org/AVI-crak/flesh_25 ... esh_25qxxx
25pxx отличается от 25qxx - возможностью отдельного стирания блока. Физика при этом не нарушается, буфер всего сектора находится в самом чипе. В целом - 25pxx сгодится для крошечных мк, где памяти и так мало. Но вот использовать её для новых разработок - не рекомендуется.

_________________
Потоковая OS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 22:11 
Заглядывает иногда

Зарегистрирован: 07 июн 2016, 19:24
Сообщения: 123
Цитата:
Но вот использовать её для новых разработок - не рекомендуется.

Это не для разработок. Микросхема уже стоит на ките - просто поиграться.
В общем, с RXNE тоже не запустилось:
Код:
    GPIOB->BSRR = GPIO_BSRR_BR11;
        while (!(SPI2->SR & SPI_SR_TXE)) {}
        SPI2->DR = 0x06;
        while (!(SPI2->SR & SPI_SR_RXNE)) {}
            (void) SPI2->DR;
    GPIOB->BSRR = GPIO_BSRR_BS11;

Отладчик вообще здесь виснет while (!(SPI2->SR & SPI_SR_RXNE)) {}. При этом без отладки зависания нет, но data_R опять равна нулю. Всегда...
В HAL, кстати, при передаче не проверяется RXNE.
Код:
      /* Wait until TXE flag is set to send data */
      if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE))
      {
        *((__IO uint8_t *)&hspi->Instance->DR) = (*hspi->pTxBuffPtr);
        hspi->pTxBuffPtr += sizeof(uint8_t);
        hspi->TxXferCount--;
      }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 23:15 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 2008
При отладке RXNE может зависать при определённых условиях.
HAL'у зачем при передаче проверять ? Да и не только HAL'у.
Он же передает, а не принимает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 23:31 
Заглядывает иногда

Зарегистрирован: 07 июн 2016, 19:24
Сообщения: 123
Так я о чём и говорю, что только на TXE нужно смотреть. Но в ряде примеров для передачи пишут как раз так (для F1):
Код:
        while (!(SPI2->SR & SPI_SR_TXE)) {}
        SPI2->DR = data;
        while (!(SPI2->SR & SPI_SR_RXNE)) {}
            (void) SPI2->DR;

Вообще на SPL для F4 нашёл такую проверку, которую вставляют как в приём, так и в передачу (SPI_WAIT(SPI2)):
Код:
while ((SPI2->SR & (SPI_SR_TXE | SPI_SR_RXNE)) == 0 || (SPI2->SR & SPI_SR_BSY)) {}

С ней в отладке не виснет, но и опять же не работает...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 23:41 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1182
PriZraK, флаг OVR установлен?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 23:42 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
При отладке идет чтение регистра DR для отображения в отладке, и при этом то и сбрасывается бит RXNE, поскольку регистр фактически прочитан трассировщиком.
Про бит BSY предупреждения написаны для режима слейва. В остальном он норм. работает, и в отладке нет с ним косяков.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 29 мар 2020, 23:51 
Заглядывает иногда

Зарегистрирован: 07 июн 2016, 19:24
Сообщения: 123
Цитата:
флаг OVR установлен?

Нет, флаг OVR всегда в нуле.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F407ZG и M25P80 (serial Flash memory)
СообщениеДобавлено: 30 мар 2020, 00:14 
Заглядывает иногда

Зарегистрирован: 07 июн 2016, 19:24
Сообщения: 123
Цитата:
При отладке идет чтение регистра DR для отображения в отладке

У меня там постоянно ноль. Т.е. при записи в регистр SPI2->DR = 0x06 в отладке его состояние никак не меняется (0).
SCK, кстати, к земле тянуть нужно? В даташите на M25P80 внешняя подтяжка есть, на плате, с которой сейчас работаю, - нет. Хотя пробовал и с ней, и без неё...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 45 ]  На страницу 1, 2  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: PriZraK


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB