Top.Mail.Ru
Уведомления
Очистить все

[Закреплено] STM32 для начинающих

Страница 9 / 17
(@aleksej-6)
Level 3

При инициализации spi через куб, можно (а у меня и нужно) продублировать полярность и фазу тактирования в отведённом для пользователя месте (в низу под "кубовскими" настройками). Пипец какой то, spi все мозги вынес...

ОтветитьЦитата
Размещено : 15.05.2023 13:31
(@eduard)
Level 4 Moderator
От: @aleksej-6

И при считывание буфера (при приёме) первый результат у меня всегда ложный, вторые и последующие данные всегда верные. Думал это из-за фазы или полярности sck

Скорее так и должно быть.

Посылаем команду и говорим, какой регистр будем читать.

Дальше зависит от ведомого. Есть два варианта.

- Если полный дуплекс, первый байт читается и отбрасывается. Остальные байты правильные.

- Ведомый сразу будет давать реальные данные.

В полудуплексе.

- Передаём команду, переключаемся на приём и лупим только тактирование. В это время Ведомый должен начать выдавать информацию. И так же, первый байт может быть левым.

Эта информация должна быть в Даташите на контроллер Ведомого.

Ещё я встречал контроллеры не помню чего, что бы он дал обратно данные, ему вместо нуля, при приёме, нужно посылать специальный байт, У меня был 0xA1.

Вариантов много.

ОтветитьЦитата
Размещено : 15.05.2023 22:19
(@aleksej-6)
Level 3
От: @eduard
От: @aleksej-6

И при считывание буфера (при приёме) первый результат у меня всегда ложный, вторые и последующие данные всегда верные. Думал это из-за фазы или полярности sck

Скорее так и должно быть.

Посылаем команду и говорим, какой регистр будем читать.

Дальше зависит от ведомого. Есть два варианта.

- Если полный дуплекс, первый байт читается и отбрасывается. Остальные байты правильные.

- Ведомый сразу будет давать реальные данные.

В полудуплексе.

- Передаём команду, переключаемся на приём и лупим только тактирование. В это время Ведомый должен начать выдавать информацию. И так же, первый байт может быть левым.

Эта информация должна быть в Даташите на контроллер Ведомого.

Ещё я встречал контроллеры не помню чего, что бы он дал обратно данные, ему вместо нуля, при приёме, нужно посылать специальный байт, У меня был 0xA1.

Вариантов много.

Добрый день !

У меня так и получается ) 

ОтветитьЦитата
Размещено : 12.06.2023 02:51
(@eduard)
Level 4 Moderator

@aleksej-6 Это очень хорошо.

ОтветитьЦитата
Размещено : 12.06.2023 12:30
 stm
(@stm)
Level 4

UART
Почему не очищается флаг TXE регистра SR?
В Reference Manual написано, что флаг TXE очищается, когда идёт запись в регистр DR.
It is cleared by a write to the USART_DR register.
Я посылаю через терминал символы, в регистр DR записалось число, но TXE не очищается.

tim2

 

ОтветитьЦитата
Размещено : 14.06.2023 09:06
 stm
(@stm)
Level 4

Я нашёл ответ.
Во первых в Reference Manual речь идёт об отправке данных и при этом транспортировку данных через регистр DR.

Бит TXE активирован тогда, когда идёт передача данных по UART, поэтому я не мог проверить когда бит TXE сброшен.
Во время передачи данных по UART другие процессы будут неактивны, которыми я пытался считать бит TXE.

ОтветитьЦитата
Размещено : 14.06.2023 11:59
 stm
(@stm)
Level 4

Systick
Есть ли различие между регистрами VAL и CURRENT?
Это один регистр ведь. Почему на 2 разных разделён?
К ним отдельно можно обращаться?
В них обоих всегда одинаковые значения?

tim2
ОтветитьЦитата
Размещено : 17.06.2023 07:08
Aveal
(@aveal)
Top level Admin

@stm CURRENT тут = 3 младших байта SysTick->VAL.

ОтветитьЦитата
Создатель темы Размещено : 17.06.2023 13:10
 stm
(@stm)
Level 4

В чём их различие?
Регистр SysTick->VAL сам является 3 х Байтным. 8 бит зарезервированы и к ним нет доступа.
Из SysTick->LOAD значение загружается в SysTick->VAL и начинает считать от этого значения до нуля.
А CURRENT что такое? Я описание нигде не нашёл.
Из названия похоже на то, что CURRENT это актуальное значение на котором сейчас находится счёт в SysTick->VAL.
Если это так, то почему эти регистры разные по размерам? И в обоих регистрах должны быть одинаковые цифры, значение для CURRENT берётся ведь из SysTick->VAL.

tim2
ОтветитьЦитата
Размещено : 17.06.2023 21:10
Aveal
(@aveal)
Top level Admin

@stm На картинке же наглядно и очевидно: есть регистр STK_VAL размером 32 бита. CURRENT - часть регистра, биты с 0-го по 23-й. Старшие биты - зарезервированы.

ОтветитьЦитата
Создатель темы Размещено : 19.06.2023 16:24
 stm
(@stm)
Level 4

Какая разница между 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);
}

ОтветитьЦитата
Размещено : 02.07.2023 02:13
(@aleksej-6)
Level 3

Здравствуйте !

Вчера обновил STM32CubeIDE Version до версии 1.13 

Не понимаю, с этим связано или совпало - куб не видит программатор. Не кто случайно не обновился до этой 13 версии ?  

ОтветитьЦитата
Размещено : 14.07.2023 10:58
Aveal
(@aveal)
Top level Admin

@aleksej-6 А ошибка какая? В системе в целом нормально определяется?

ОтветитьЦитата
Создатель темы Размещено : 14.07.2023 11:45
(@aleksej-6)
Level 3
image

Попробовал удалить новую версию, поставил 1.12 но ошибки те же..

Через ST - программатор, память микроконтроллера стирать могу.

image
ОтветитьЦитата
Размещено : 14.07.2023 11:53
(@aleksej-6)
Level 3
image

Может в этой "GBR comand lain" дело ?...

ОтветитьЦитата
Размещено : 14.07.2023 13:12
Страница 9 / 17
Поделиться: