реклама на сайте
подробности

 
 
> STM32H743 SPI, Не работает
hd44780
сообщение Jul 18 2018, 13:34
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Привет всем.
Попал тут в руки проц STM32H743 в виде платы NUCLEO-H743I.

Разобрался, как запустить его на все 400 МГц, Systick завёл, светодиодиками помигал - все это заработало. Частоту систика проверил осциллом.
Перешёл к SPI (маленький дисплейчик ILI9163). Сам дисп рабочий, работал на Ф103. Драйвер диспа собственно оттуда же.
Драйвер разделён на 2 части - низкоуровневая (работа с SPI и ногами) и т.н. высокоуровневая (пуляние в дисп команд, отрисовка точек, знакогенератор и пр).
Соответственно в адаптации нуждается только низкоуровневая часть, т.к. высокоуровневая напрямую в ноги и SPI не лезет.
С ногами nCS, nRESET и пр. ногодрыгом я управился, они работают нормально, а с SPI затык - синхра идёт исправно, а из ноги MOSI упорно прёт ноль. Нога MISO в данном случае не нужна вообще, т.к. у дисплея её нет.

Пишу на помеси из регистров и кубового хала. М.б. это и нехорошо, но с ходу писать на регистрах на проце, которого раньше в глаза не видел как-то нехорошо.

Инит пинов:

CODE
// Configure PA5 - SPI1 SCK
GPIO_InitStruct.Pin = GPIO_PIN_5; // SCK
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
// GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

/*
// Configure PA7 - SPI1 MOSI
// Configure PB5 - SPI1 MOSI
// Configure PD7 - SPI1 MOSI
GPIO_InitStruct.Pin = GPIO_PIN_7; // MOSI
// GPIO_InitStruct.Pin = GPIO_PIN_5; // MOSI
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
// GPIO_InitStruct.Pull = GPIO_PULLUP;
// GPIO_InitStruct.Pull = GPIO_PULLDOWN;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
// HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
*/
// PA7 - SPI1 MOSI
// MODER - AF = 10
GPIOA->MODER |= GPIO_MODER_MODER5_1; // 10
// TYPER - PP = 0 - Push-pull
GPIOA->OTYPER |= GPIO_OTYPER_IDR_7; // 0
// SPEEDR - OSPEEDRy = 11
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR7; // 11
// PUPD_R = 10 - Pull-down
GPIOA->PUPDR |= GPIO_PUPDR_PUPDR7_1; // 10


Нога PA5 (SCK) работает как угодно - хоть халом её инитить, хоть чем. PA7 (MOSI) - не работает никак. Инитил по-разному.

Инит SPI (в основном хал):
CODE
/*** Configure the SPI peripheral ***/
SPI_PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_SPI123;
SPI_PeriphClkInit.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
HAL_RCCEx_PeriphCLKConfig(&SPI_PeriphClkInit);

/* Enable SPI clock */
// __HAL_RCC_SPI1_CLK_ENABLE();
// SET_BIT (RCC->APB2ENR, RCC_APB2ENR_SPI1EN);
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;

// SPI Config
hnucleo_Spi.Instance = SPI_PORT;
// hnucleo_Spi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
hnucleo_Spi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
hnucleo_Spi.Init.Direction = SPI_DIRECTION_2LINES;
// hnucleo_Spi.Init.Direction = SPI_DIRECTION_2LINES_TXONLY;
hnucleo_Spi.Init.CLKPhase = SPI_PHASE_2EDGE;
hnucleo_Spi.Init.CLKPolarity = SPI_POLARITY_HIGH;
hnucleo_Spi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hnucleo_Spi.Init.CRCPolynomial = 7;
hnucleo_Spi.Init.DataSize = SPI_DATASIZE_8BIT;
hnucleo_Spi.Init.FirstBit = SPI_FIRSTBIT_MSB;
hnucleo_Spi.Init.NSS = SPI_NSS_SOFT;
hnucleo_Spi.Init.TIMode = SPI_TIMODE_DISABLE;
hnucleo_Spi.Init.Mode = SPI_MODE_MASTER;
hnucleo_Spi.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE; /* Recommended setting to avoid glitches */

hnucleo_Spi.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
hnucleo_Spi.Init.CRCLength = SPI_CRC_LENGTH_8BIT;
hnucleo_Spi.Init.TxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
hnucleo_Spi.Init.RxCRCInitializationPattern = SPI_CRC_INITIALIZATION_ALL_ZERO_PATTERN;
hnucleo_Spi.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
hnucleo_Spi.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
hnucleo_Spi.Init.MasterSSIdleness = 0x00000000;
hnucleo_Spi.Init.MasterInterDataIdleness = 0x00000000;
hnucleo_Spi.Init.MasterReceiverAutoSusp = 0x00000000;

HAL_SPI_Init(&hnucleo_Spi);

// Enable SPI peripheral
SET_BIT( SPI_PORT->CR1 , SPI_CR1_SPE);

SPI_PORT === SPI1.

Отправка байта в SPI1 (хал):
CODE
// Чтение/запись байта SPI
void ili9162_sendByte ( uint8_t data )
{
/*
// Длина передаваемых байт - 1
MODIFY_REG (SPI1->CR2, SPI_CR2_TSIZE, 1);
// Старт передачи
SET_BIT(SPI1->CR1, SPI_CR1_CSTART);

while ( !( SPI1 -> SR & SPI_SR_TXP ) );
SPI1 ->TXDR = data;

// Ждать завершения передачи
// while ( ! ( SPI1 -> SR & SPI_SR_TXC ) );
*/
uint8_t data_in;
HAL_StatusTypeDef status = HAL_OK;
status = HAL_SPI_TransmitReceive(&hnucleo_Spi, &data_in, &data, 1, 1000);
} // SPI_sendByte


Моя поделка на регистрах не пашет вообще, я пока бросил, оставил хал.
Проверяю всё это вызовом в вечном цикле ili9162_sendByte ( 0xAA );

В чём может быть дело? Если надо, выложу весь проект на 9 атоллике.

Спасибо.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MasterElectric
сообщение Jul 23 2018, 08:06
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 19-07-18
Пользователь №: 106 151



Да вроде нормальный.
https://drive.google.com/open?id=1Jibo-gxol...5AZZYmEYEfauK-Q

Пытаюсь выполнить рекомендованную последовательность:
Код
To close communication it is mandatory to follow these steps in order:
1. Disable DMA request for Tx and Rx in the DMA registers, if the DMA issued.
2.  Disable the SPI by following the SPI disable procedure.
3.  Disable DMA Tx and Rx buffers by clearing the TXDMAEN and RXDMAEN bits in the
SPI_CFG1 register, if DMA Tx and/or DMA Rx are used.


Не совсем понятен первый пункт, ДМА стрим я отключаю, но как отключить запросы ДМА по Tx в регистрах ДМА я не понял.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- hd44780   STM32H743 SPI   Jul 18 2018, 13:34
- - Genadi Zawidowski   Как ни странным может показаться, при передаче 8-b...   Jul 18 2018, 14:44
|- - hd44780   Судя по осциллу SPI и его ноги ожили. Долбаный хал...   Jul 18 2018, 15:46
- - Genadi Zawidowski   Разумеется, всегда надо (если иное не сказано). А ...   Jul 18 2018, 16:17
- - hd44780   С C/D и nCS всё в порядке: CODEvoid ILI9163writec...   Jul 18 2018, 16:32
- - MasterElectric   Если просто писать в TXDR данные пишуться в буфер,...   Jul 19 2018, 22:33
- - hd44780   Что-то я совсем запутался Некий прогресс есть, хо...   Jul 20 2018, 14:23
- - MasterElectric   Как разберусь сам помогу) делаю для NRF24. К коду ...   Jul 20 2018, 16:02
|- - hd44780   Цитата(MasterElectric @ Jul 20 2018, 19:0...   Jul 20 2018, 17:22
- - Tarbal   Пару лет назад я делал проект на похожем процессор...   Jul 20 2018, 17:23
- - MasterElectric   hd44780 Вроде бы все получилось. Особое внимание н...   Jul 21 2018, 07:57
- - MasterElectric   поправочка : Код SPI_NRF->SPI->CFG1 = SPI...   Jul 21 2018, 09:11
|- - hd44780   Цитата(MasterElectric @ Jul 21 2018, 12:1...   Jul 21 2018, 09:25
- - MasterElectric   Заработало!!! Причем особо ничего не м...   Jul 21 2018, 10:41
- - Arlleex   Че-то вы тут поникли все. Надо свою поделку допаят...   Jul 21 2018, 10:50
- - MasterElectric   В общем не получилось побороть SPI, когда количест...   Jul 21 2018, 12:08
- - hd44780   Я кое-как скрутил отправку одного байта ... SPI ди...   Jul 21 2018, 16:42
- - MasterElectric   Почему одного байта? Я пакеты нормально слал. Да н...   Jul 21 2018, 17:46
|- - hd44780   Цитата(MasterElectric @ Jul 21 2018, 20:4...   Jul 22 2018, 06:11
- - Genadi Zawidowski   Да нормально все работет... перепишите АККУРАТНО и...   Jul 21 2018, 17:47
- - MasterElectric   О вы уже успели и ДМА изучить... это олично... нам...   Jul 21 2018, 17:49
- - Genadi Zawidowski   Файл hardware.c hardware_spi_master_initialize har...   Jul 21 2018, 17:58
- - MasterElectric   Genadi Zawidowski Спасибо, буду изучать.   Jul 21 2018, 18:18
- - Genadi Zawidowski   Цитата( SPI_PORT->SR & SPI_SR_RXP != 0 ...   Jul 22 2018, 06:46
- - hd44780   Genadi Zawidowski , да, чёт я тупанул, спасибо, по...   Jul 22 2018, 07:28
- - MasterElectric   Ситуация с передачей через ДМА совсем отвратительн...   Jul 22 2018, 15:19
- - Genadi Zawidowski   Цитатаподелитесь кодом А чем мой не устраивает-то?...   Jul 22 2018, 15:43
- - MasterElectric   Я смотрел Ваш код (частично взял оттуда), вроде бы...   Jul 22 2018, 16:24
- - Genadi Zawidowski   ЦитатаЕсли есть возможность попробуйте передать па...   Jul 22 2018, 16:37
- - MasterElectric   Удалось побороть как всегда благодаря RM: КодWhen ...   Jul 23 2018, 07:01
- - Genadi Zawidowski   Снять SPE бит в конце пробовали?   Jul 23 2018, 07:13
- - MasterElectric   Да, в обработчике прерывания EOT, отключаю.   Jul 23 2018, 07:28
- - Genadi Zawidowski   Тогда не знаю... В моем варианте connect/send_fram...   Jul 23 2018, 07:38
- - MasterElectric   После отключения SPI (SPE), в регистре статуса поя...   Jul 23 2018, 11:19
- - hd44780   MasterElectric , у Вас приём через прерывание норм...   Jul 23 2018, 11:56
- - MasterElectric   может полярность или фаза не так настроена. пока п...   Jul 23 2018, 18:15
|- - hd44780   Цитата(MasterElectric @ Jul 23 2018, 21:1...   Jul 24 2018, 05:11
- - hd44780   Датчик заработал, всё гуд. Осталось его только на ...   Jul 24 2018, 16:40
- - MasterElectric   тут наверное ошибочка Код // Disable SPI SET_B...   Jul 24 2018, 17:51
- - Genadi Zawidowski   ЦитатаОно тупо виснет на первом цикле ожидания еди...   Jul 24 2018, 21:33
- - hd44780   Да, со SPE опечатка вышла при вставке кода в форум...   Jul 25 2018, 07:08
- - MasterElectric   Вы же не указываете кол-во передаваемых байт?   Jul 25 2018, 14:33
|- - hd44780   Цитата(MasterElectric @ Jul 25 2018, 17:3...   Jul 25 2018, 16:26
- - MasterElectric   Да не заметил. Я думаю под себя перепишите. Приме...   Jul 25 2018, 20:11
|- - hd44780   Цитата(MasterElectric @ Jul 25 2018, 23:1...   Jul 26 2018, 04:28
- - MasterElectric   У меня план ковыряний примерно такой же, QSPI давн...   Jul 26 2018, 15:23
- - hd44780   MasterElectric, удачи. Мои эксприменты, похоже, от...   Jul 26 2018, 16:43
- - MasterElectric   Печалька, а где вы ее кстати покупали, в китае? у ...   Jul 26 2018, 17:35
|- - hd44780   Цитата(MasterElectric @ Jul 26 2018, 20:3...   Jul 26 2018, 18:01
- - MasterElectric   ну скорее всего ошибка в коде и он уходит в стоп р...   Jul 26 2018, 18:06
- - hd44780   Осциллом 3.3 платы посмотрел - чисто. Может иголки...   Jul 27 2018, 13:33
|- - hd44780   Вот так нормально работает опросом: Код// Чтение/...   Jul 29 2018, 12:27
- - hd44780   Датчик успешно переехал на SPI3 .   Jul 29 2018, 15:27
- - hd44780   Небольшой оффтоп в теме про SPI: Покопался ещё на...   Aug 5 2018, 15:02
- - hd44780   Всё-таки это косяки в либах атоллика (я про sprint...   Aug 18 2018, 07:00
- - nanorobot   Цитата(hd44780 @ Aug 18 2018, 12:00) Всё-...   Aug 18 2018, 11:04


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 03:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01903 секунд с 7
ELECTRONIX ©2004-2016