Кто любит RISC в жизни, заходим, не стесняемся.
Вт дек 07, 2021 18:59:36
Наверняка есть какой нибудь костыль, Сишка вроде может все на свете сделать
Вы, вместо того, что костыли лепить, опишите зачем вам это. Что вы хотите этим костылём добиться.
Наверняка имеется иное, нормальное решение вашей задачи без костылей.
Вт дек 07, 2021 19:37:30
TEPEM, попробуй longjmp..
Вт дек 07, 2021 20:32:36
Мое почтение Владислав! Как что то делаю, всегда захожу в наш топик на форуме и качаю ваши библиотеки)
На самом деле все уже решил. Делал аргонник ради забавы из ручника, ну осцил прикрутил, клапан, пульс прикрутил, и хотел по легкой алгоритм всяких ошибок и вариантов работы так решить. Как всегда вышло коряво но работает)
Но интерес остался на самом деле, хотя уже сказали что это не реализовать( Я думал есть что то для этого.
Longjmp что то интересное, что то не помню такого в КиР, описание в вики скудное(
Вт дек 07, 2021 21:43:02
TEPEM писал(а):не помню такого в КиР
Там этого нет. Это ассемблер. Причём даже не ARM, а C51.
Вт дек 07, 2021 22:27:41
Инструменты нужно осваивать, но не до фанатизма ассемблера! Когда же творить? 20 лет назад в экселе распознавал образы, 10 лет назад на тиньке в Бейсике делал фантастические проекты, а сейчас осваиваю инструменты для работы с stm32H743 и это уже самоцель!:(
Вт дек 07, 2021 22:40:15
Что то все перепробовал, почему может не очищаться флаг?
Спойлер
Вт дек 07, 2021 23:42:41
Точно TXE не устанавливается? Может, где-то в другом месте зависает?
Если именно здесь, то получается, что перед этим что-то вырубает SPI, как раз после SPI->DR = dat;
Ср дек 08, 2021 00:08:46
Я разобрался спс. Метод тыка самый полезный метод. Все регистры по пять раз перебрал, оказалось биты в AFR записываются из расчета с права младшие, хз де логика
Ср дек 08, 2021 06:42:30
TEPEM, функция Send_CMD - целый табун ошибок. Давай её текст сюда в нормальном виде, будем разбирать.
Ср дек 08, 2021 08:52:22
TEPEM писал(а):Что то все перепробовал
Зачем подряд дважды делать операцию чтение-модификация-запись над одним и тем же регистром?
- Код:
GPIOA->ODR &= ~(1<<4); // CS=0
GPIOA->ODR &= ~(1<<2); // DC=0
Сделайте за один раз:
- Код:
GPIOA->ODR &= ~((1<<2)|(1<<4)); // CS=0, DC=0
Следующий шаг - избавьтесь от чтения-модификации-записи, заменив это записью:
- Код:
GPIOA->BRR = (1<<2)|(1<<4); // CS=0, DC=0
Уберите магические числа из основного кода, заменив их осмысленными именами:
- Код:
#define SPI_CNTRL_PORT GPIOA
#define DC_PIN_POS 2
#define DC_PIN_MSK (1<<DC_PIN_POS)
#define CS_PIN_POS 4
#define CS_PIN_MSK (1<<CS_PIN_POS)
SPI_CNTRL_PORT->BRR = CS_PIN_MSK|DC_PIN_MSK; // CS=0, DC=0
Ср дек 08, 2021 13:48:27
Это не всё, вернее не главное. Посылка буде 16 бит вместо требуемых 8.
Ср дек 08, 2021 13:52:08
TEPEM, функция Send_CMD - целый табун ошибок. Давай её текст сюда в нормальном виде, будем разбирать.
Да я ее скопировал у кого то, потом добавлял что то в надежде получить результат. Поэтому и порты по очереди записаны, я разные комбинации пробовал. Логично же например, что чип селект при выборе устройства должен быть высокого уровня, а оказывается наоборот и так со всем
А разве вот это не делает 8Битный режим? SPI1->CR1 &= ~SPI_CR1_DFF;
- Код:
void Send_CMD(uint8_t dat)
{ //Otpravka komand
GPIOA->ODR &= ~(1<<4) | (1<<2); //ChipSelect loy
SPI1->CR1 &= ~SPI_CR1_DFF;
while (!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = dat;
while (!(SPI1->SR & SPI_SR_TXE));
while ((SPI1->SR & SPI_SR_BSY));
GPIOA->ODR |= (1<<4); //ChipSelect Up
}
Ср дек 08, 2021 14:15:02
А разве вот это не делает 8Битный режим? SPI1->CR1 &= ~SPI_CR1_DFF;
Да, я забыл, что в F4 нет FIFO в SPI. Только в даташите сказано, что этот бит дёргать надо при выключенном SPI.
А на будущее запомните про SPI->DR, он в других контроллерах "особенный".
- Код:
GPIOA->BRR = (1<<2)|(1<<4); // CS=0, DC=0
Точно так же как нет регистра BRR. Так что, на выбор стандартное
- Код:
//GPIOA->BSRR = ((1<<4)|(1<<2)) << 16;
LDR.N R1,??DataTable2
MOV R0,#+1310720
STR R0,[R1, #+0]
??DataTable2:
DATA32
DC32 0x40020018
или более оптимальное
- Код:
//*(((volatile uint16_t *)&GPIOA->BSRR)+1) = (1<<4)|(1<<2);
LDR.N R1,??DataTable2
MOVS R0,#+20
STRH R0,[R1, #+0]
??DataTable2:
DATA32
DC32 0x4002001a
Ср дек 08, 2021 20:54:06
Раз уж мы тут так здорово собрались, может просветите меня по давно волнующему вопросу
Почему нельзя порт на выход проверить на наличие там логического уровня
- Код:
if(GPIOB->IDR & (1<<1))
Не работает если порт настроен на выход =(
Ср дек 08, 2021 21:47:04
- Код:
if(GPIOB->IDR & (1<<1))
Не работает если порт настроен на выход =(
Входной драйвер не работает только в аналогом режиме, в RM все расписано, даже с картинками.
Ср дек 08, 2021 22:50:27
Всегда работало (кроме аналога само собой) - можно прямо в отладчики в ODR потыкать и убедиться, что на IDR появляется.
Чт дек 09, 2021 02:39:27
Очень странно, у меня отказалось(
Вс дек 12, 2021 14:58:01
Я тут решил поработать с примерами в CubeMX. Оказалось, что примеры грузятся по умолчанию в папку "Администратор", а потом при запуске примеров сыпятся ошибки на эту папку, типа русский не понимаю. Если в другую папку, то работают. А ещё почти все примеры на типичные процы не поддерживают CubeMX, а только CubeIDE. Как это понять? Сам себя не понимает?
Вт янв 18, 2022 22:44:13
Я теперь знаю с чего начать обучение - с языка си! Идеальный язык под железо, но не все так радужно. Раньше было только два железа PC и Apple, и два компилятора, а теперь тысячи процев и под каждый свой компилятор! Программисты не успевают отладить и много ошибок. Сам язык не привязан к конкретному железу, но использует множество библиотек и файлов сомнительного качества, а потом из всего собирается проект и исполняемый код и это трудно контролировать. Для творчества этот язык создавался в последнюю очередь.
Вт янв 18, 2022 23:12:46
а теперь тысячи процев и под каждый свой компилятор!
Что за чушь? Практически подо все приличные МК можно собирать посредством gcc. А под неприличные — sdcc.
А насчет "библиотек сомнительного качества" — так их только абдуринщики/калокубщики используют.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.