При инициализации spi через куб, можно (а у меня и нужно) продублировать полярность и фазу тактирования в отведённом для пользователя месте (в низу под "кубовскими" настройками). Пипец какой то, spi все мозги вынес...
И при считывание буфера (при приёме) первый результат у меня всегда ложный, вторые и последующие данные всегда верные. Думал это из-за фазы или полярности sck
Скорее так и должно быть.
Посылаем команду и говорим, какой регистр будем читать.
Дальше зависит от ведомого. Есть два варианта.
- Если полный дуплекс, первый байт читается и отбрасывается. Остальные байты правильные.
- Ведомый сразу будет давать реальные данные.
В полудуплексе.
- Передаём команду, переключаемся на приём и лупим только тактирование. В это время Ведомый должен начать выдавать информацию. И так же, первый байт может быть левым.
Эта информация должна быть в Даташите на контроллер Ведомого.
Ещё я встречал контроллеры не помню чего, что бы он дал обратно данные, ему вместо нуля, при приёме, нужно посылать специальный байт, У меня был 0xA1.
Вариантов много.
И при считывание буфера (при приёме) первый результат у меня всегда ложный, вторые и последующие данные всегда верные. Думал это из-за фазы или полярности sck
Скорее так и должно быть.
Посылаем команду и говорим, какой регистр будем читать.
Дальше зависит от ведомого. Есть два варианта.
- Если полный дуплекс, первый байт читается и отбрасывается. Остальные байты правильные.
- Ведомый сразу будет давать реальные данные.
В полудуплексе.
- Передаём команду, переключаемся на приём и лупим только тактирование. В это время Ведомый должен начать выдавать информацию. И так же, первый байт может быть левым.
Эта информация должна быть в Даташите на контроллер Ведомого.
Ещё я встречал контроллеры не помню чего, что бы он дал обратно данные, ему вместо нуля, при приёме, нужно посылать специальный байт, У меня был 0xA1.
Вариантов много.
Добрый день !
У меня так и получается )
UART
Почему не очищается флаг TXE регистра SR?
В Reference Manual написано, что флаг TXE очищается, когда идёт запись в регистр DR.
It is cleared by a write to the USART_DR register.
Я посылаю через терминал символы, в регистр DR записалось число, но TXE не очищается.
Я нашёл ответ.
Во первых в Reference Manual речь идёт об отправке данных и при этом транспортировку данных через регистр DR.
Бит TXE активирован тогда, когда идёт передача данных по UART, поэтому я не мог проверить когда бит TXE сброшен.
Во время передачи данных по UART другие процессы будут неактивны, которыми я пытался считать бит TXE.
Systick
Есть ли различие между регистрами VAL и CURRENT?
Это один регистр ведь. Почему на 2 разных разделён?
К ним отдельно можно обращаться?
В них обоих всегда одинаковые значения?
В чём их различие?
Регистр SysTick->VAL сам является 3 х Байтным. 8 бит зарезервированы и к ним нет доступа.
Из SysTick->LOAD значение загружается в SysTick->VAL и начинает считать от этого значения до нуля.
А CURRENT что такое? Я описание нигде не нашёл.
Из названия похоже на то, что CURRENT это актуальное значение на котором сейчас находится счёт в SysTick->VAL.
Если это так, то почему эти регистры разные по размерам? И в обоих регистрах должны быть одинаковые цифры, значение для CURRENT берётся ведь из SysTick->VAL.
@stm На картинке же наглядно и очевидно: есть регистр STK_VAL размером 32 бита. CURRENT - часть регистра, биты с 0-го по 23-й. Старшие биты - зарезервированы.
Какая разница между HAL_UART_Receive_IT и HAL_UART_Receive_DMA?
Кроме того, что у DMA написано, что это прямой доступ к памяти.
Работают эти функции на мой взгляд одинаково.
В чём их разница?
Вот небольшой проект, в котором ничего не изменится если _IT заменить на _DMA.
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_Transmit_IT(&huart3, data,5);
HAL_UART_Receive_IT(&huart3, data,5);
}
int main()
{
HAL_UART_Receive_IT(&huart3, data,5);
}
Здравствуйте !
Вчера обновил STM32CubeIDE Version до версии 1.13
Не понимаю, с этим связано или совпало - куб не видит программатор. Не кто случайно не обновился до этой 13 версии ?
@aleksej-6 А ошибка какая? В системе в целом нормально определяется?
Попробовал удалить новую версию, поставил 1.12 но ошибки те же..
Через ST - программатор, память микроконтроллера стирать могу.
Может в этой "GBR comand lain" дело ?...