Нужно заменить 3 регистра. Один нашел похожий DISP_SPI->DR заменил на DISP_SPI->TXDR. SPI_SR_TXE пока заменил на SPI_SR_TXC, но там есть варианты. А вот SPI_SR_BSY в H743 ничего похожего нет.
У H7 совершенно другой SPI, простая замена флагов и регистров на таковые с похожими названиями работать не будет. И не забываем про упаковку, записав в TXDR байт можно отправить сразу 4, если регистр 32-х разрядный, нужно приведение:
Код:
*(volatile uint8_t*)&SPIx->TXDR = val;
Отправка идет пакетами, проверять нужно флаги TXP/RXP. И в RM есть глава про правильное выключение SPI, естественно при этом нужно дожидаться окончания передачи данных, т.е. из нее можно почерпнуть чем заменяется BSY...
А куда будет цепляться этот дисплей без SPI? Если к FMC, то как сказать, с моей точки зрения проще, а кому-то наоборот FMC, в плане совместимости, практически аналог FSMC для F4, единственное нужно выбрать банк в некешируемом регионе.
Reflector, Вспомнил! TFT на шине я запускал в микробейсике именно на H743, но там не смог запустить АЦП. А библиотеке, наверное, пофиг, где её запускают? На микропаскале и SPI дисплей на H743 работает, но там всё встроено и извлечь нельзя, а регистры по своему названы.
Добавлено after 9 hours 1 minute 11 seconds: Reflector, а что такое ногодрыга? Это плохо? Есть такая библиотека.
Если нет аппаратного интерфейса, такого как SPI или FMC, то приходится дергать пинами софтово, что не то чтобы плохо, ведь иначе никак, но относительно медленно и обычно без DMA, хотя можно и с ним. У H7 есть FMC, лучше его и задействовать.
Пока балуюсь с ногодрыгой по шине 8бит. Перенес рабочий проект с F103 на H743, по крайней мере, экран ожил, в цвета окрашивается, но вместо шрифтов квадратики с мусором. Графика работает. Что может быть?
Теперь не могу запустить DMA на Н743. Настраиваю, как на F103, а преобразование не запускается, в массиве нули и прерывания нет. Очередность инит исправлена, сначала DMA, потом ADC.
Добавлено after 2 hours 38 minutes 15 seconds: Проверил еще, где лежит массив, это RAM_D1, а то если DTCM, то DMA туда не пишет.
Уже упростил код до примитива без DMA. HAL_ADC_Start(&hadc1); /* USER CODE END 2 */ while (1) { HAL_Delay(100); HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); flag= HAL_ADC_GetValue(&hadc1); } На 103 работает, на 743 не работает, точнее выдает только начальное значение ADC при загрузке! На этот раз меня не проведешь, однозначно ошибка библиотеки HAL под 743.
Не могу запустить DMA в CubeIDE на H743, а без DMA даже 1 мегасимпл не получается. В микропаскале выжимал без DMA с этого камня 3 мегасимпла. Для осцила не самый подходящий камень. F103 и то лучше, 9мегасимплов выжал! F303 нужно помучить. Вот смотрю код микропаскаля, а там ребята "ружья кирпичом не чистят:)". DTCM-RAM 128KB 0x2000 0000 ~ 0x2001 FFFF 400(480)Mhz Domain 1 // AXI_SRAM_D1 512KB 0x2400 0000 ~ 0x2407 FFFF 200(240)Mhz Domain 1 / MDMA // SRAM1_D2 128KB 0x3000 0000 ~ 0x3001 FFFF 200(240)Mhz Domain 2 / DMA1,2 Массив нужно в 0x3000 0000 загонять!
Нужно выставить ContinuousConvMode = ENABLE; ADC_CONVERSIONDATA_DMA_CIRCULAR; В функцию HAL_ADC_Start_DMA(&hadc1, ptr, 64); вместо массива подставить указатель на доступную для DMA память. После запуска ADC DMA его нужно остановить (лучше в прерывании) и запускать снова. while (1) { HAL_ADC_Start_DMA(&hadc1, ptr, 64);// uint32_t *ptr = 0x30003000; HAL_Delay(100); HAL_ADC_Stop_DMA(&hadc1); В дебаге выбрать контроль памяти и можно смотреть результат. В настройках DMA выбрать WORD для удобства контроля. Если Half, то будет паковать по 16 бит и длину записи можно уменьшить в два раза. https://drive.google.com/file/d/1I9ojWk ... sp=sharing
Нужно добавлять калибровку. /* USER CODE BEGIN 2 */ HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET_LINEARITY , ADC_SINGLE_ENDED); HAL_Delay(100);
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения