Есть три неприятные функции в хале, которые я пытаюсь заменить cmsis.
Если я правильно понял, ТС используется SPI для работы с W25Qxxx. Вот простейший вариант реализации доступа к этой микросхеме. Работает на STM32F4. Спойлер
TIM2->CR1 |= TIM_CR1_ARPE; // buffer the ARR register (not esp useful in this example) TIM2->PSC = 96000000/1000000-1; // scale to 1us const int freq = 800; // Hz TIM2->ARR = 1000000/freq; // convert freq to counts. Auto Reload Register TIM2->CCR2 = TIM2->ARR/10; // Duty cycle 50% on Compare/Capture Register 2 TIM2->CCMR1 |= TIM_CCMR1_OC2PE // Enable preload for channel 2 | (0b110 << TIM_CCMR1_OC2M_Pos); // PWM mode 1 TIM2->CCER |= TIM_CCER_CC2E; // Enable Capture Compare for channel 2 TIM2->EGR |= TIM_EGR_UG;
Кнопочка там делает TIM2->CR1 |= TIM_CR1_CEN; и все работает. Но есть одно огромное НО. Запуск при подаче питания на плату, с порта вылетает +3в. ИБП не расчитан на прямое включение, оффает сразу от такого подката. Да и фиг бы с ним. Но и движку крутится не надо без кнопки. Ни какие танцы с бубном вокруг подтяжки порта не чего не дают. Более того только выключение 2го канала таймера избавляет от этого плевка в начале, но стоит его включиить и шим начинается с этого плевка. Я уже хз что делать хоть дополнительный ключ ставить в схему управления драйвером. Выручайте пж
Берём отладчик в руки и останавливаемся на команде включения таймера. Непосредственно сразу перед её выполнением смотрим состояние всех регистров. Выход CH2 это функция от значения этих регистров. Тыкаем в отладчике значения и смотрим какой бит влияет на неправильное поведение.
Здравствуйте! Подключаю дисплей ST7735 к 32L476. SPI1. Использую проверенную инициализацию. И он вроде запускается, рябь все дела. А залить не заливается. Единственное что поменял кроме пинов - переключение 8 / 16 битовой передачи. Ибо до этого юзал 411 стм. Там было SPI2->CR1 &= ~SPI_CR1_DFF; А в 476 нет DEF и вместо него я юзаю SPI1->CR1 &= ~SPI_CR1_CRCL; Вроде синониумы. Еще грешу на пины дисплея TP0 & TP1 они у меня в воздухе. Подскажите пж, давно сношаюс вот код инициализации и заливки Спойлер
Код:
void Send_CMD(uint8_t dat) { CS_LOY; //ChipSelect loy DC_LOY; //DC LoyLevel SPI1->CR1 &= ~SPI_CR1_CRCL; while (!(SPI1->SR & SPI_SR_TXE)); SPI1->DR = dat; while (!(SPI1->SR & SPI_SR_TXE)); while ((SPI1->SR & SPI_SR_BSY)); CS_H; //ChipSelect Up
} void Send_DAT(uint8_t dat){ CS_LOY; //ChipSelect loy DC_H; //DC H SPI1->CR1 &= ~SPI_CR1_CRCL; while (!(SPI1->SR & SPI_SR_TXE)); SPI1->DR = dat; while (!(SPI1->SR & SPI_SR_TXE)); while ((SPI1->SR & SPI_SR_BSY)); CS_H;//ChipSelect Up }
void Send_DAT16(uint16_t dat){ CS_LOY; //ChipSelect loy DC_H; //DC H SPI1->CR1 |= SPI_CR1_CRCL; while (!(SPI1->SR & SPI_SR_TXE)){}; SPI1->DR = dat; while (!(SPI1->SR & SPI_SR_TXE)){}; while ((SPI1->SR & SPI_SR_BSY)){}; CS_H;//ChipSelect Up }
Команды 8 битные передаются при стирании флага SPI1->CR1 &= ~SPI_CR1_CRCL;, а 16 битные при установке. Или я не то что то понял
Нужно ещё и обращение к порту на 8 бит переделать. *((__IO uint8_t *)&SPI1->DR) = dat; И сам dat сделать uint8_t.
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 6 декабря 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
Команды 8 битные передаются при стирании флага SPI1->CR1 &= ~SPI_CR1_CRCL;, а 16 битные при установке. Или я не то что то понял
Нужно ещё и обращение к порту на 8 бит переделать. *((__IO uint8_t *)&SPI1->DR) = dat; И сам dat сделать uint8_t.
Там uint8_t стоит dat. Заработало. Но не понятно почему. Там написано в рефе по умолчанию CRCL не записан что соответствует 8 бит. я его еще и стираю на всякий. Почему не работало без
VladislavS, можно же просто оформить значения инита в массив констант и оттуда в цикле вычитывать. Зачем эти пляски с объектами?
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 6 декабря 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
PS: Насчёт зачем. Я смею утверждать, что этот код лучше оптимизируется компилятором.
По ошибке бегло зацепился за токен class и обращение к членам. А потом уже увидел структуру. Ну да, так тоже можно, но я не уверен, что такая погоня за универсальностью (и удобством для человека) будет более оптимальным решением. Ну да ладно, решение достаточно изящно.
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 6 декабря 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения