stm32f4 cmsis usart +terminal1,9 b

Кто любит RISC в жизни, заходим, не стесняемся.
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32f4 cmsis usart +terminal1,9 b

Сообщение ivan dimir »

Лёд тронулся.Правда на stm32f103.

Добавлено after 7 minutes 9 seconds:
У меня единственное.Не получается строку отправить.Проблема была в прерывании системного таймера.А вторая проблемаMODIFY_REG(USART1->CR1,
USART_CR1_M | USART_CR1_PCE | USART_CR1_PS ,USART_CR1_TE |USART_CR1_RE); в этой строке а вернее с запятой.Если её убрать
MODIFY_REG(USART1->CR1,
USART_CR1_M | USART_CR1_PCE | USART_CR1_PS |USART_CR1_TE |USART_CR1_RE);-так не работает.А как же мне строку отправить?
Вложения
main.c
(17.72 КБ) 167 скачиваний
Реклама
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: stm32f4 cmsis usart +terminal1,9 b

Сообщение tonyk »

Professor Chaos писал(а):Извиняюсь, ошибся. У вас так:
Reg = (0<<Pos1)|(0<<Pos2);
Надо лишь помнить, что такой записью вы портите содержимое всех прочих битовых полей регистра Reg, что тоже нежелательно.
"Шарик! Ты- балбес! (с) Кот Матроскин"
Ты про это?

Код: Выделить всё

ComPort UART_base::open
(
    ComPort     _port,
    uint32      _baudRate,
    uint8       _dataBits,
    Parity      _parity,
    StopBits    _stopBits
)
{

   // Сбросим все конфигурационные биты. По ходу разбора параметров будем
    // выставлять нужные.
    usart -> CR1 = \
    usart -> CR2 = \
    usart -> CR3 = 0;

.......

    usart -> SR = 0;
    setEvents();	// Разрешаем нужные нам прерывания.
.......
    return( port );
}

///////////////////////////////////////

void
ConIO::setEvents( void )
{
    // Сначала сбросим биты событий.
    //usart -> ISR  = 0;

    usart -> CR1 =
    (
        // Запрос прерывания в следующих случаях:

        0 << USART_CR1_TCIE_Pos     |   // - по установке бита TC регистра SR,
                                        // т.е. при окончании передачи;

        0 << USART_CR1_TXEIE_Pos    |   // - по установке бита TXE регистра SR,
                                        // т.е. при начале передачи;
        0 << USART_CR1_RXNEIE_Pos   |   // - что-то пришло в УАРТ.

        // Не забываем включить сам модуль и выводы:

        1 << USART_CR1_TE_Pos       |   // - включаем передатчик;
        1 << USART_CR1_RE_Pos       |   // - включаем приёмник;
        1 << USART_CR1_UE_Pos           // - включение USART.
    );
    
    // Разрешаем приём, передачу, устанавливаем обработчики прерываний,
    // включаем тактирование.

    installInterruptHandler( usart_IRQn );
}
Я их не просто порчу, а устанавливаю в нужные мне значения!
Reg |= (0<<Pos1)|(0<<Pos2);
Для чего вы это пишите? Проговорите словами, что вы хотите сделать такой строкой.
Зачем словами? Я говорю в данном случае на языке программирования. И говорю я, что не забыл про эти биты, более того, мне нужно, чтобы в этой точке программы они были равны нулю.
Реклама
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: stm32f4 cmsis usart +terminal1,9 b

Сообщение Dimon456 »

ivan dimir писал(а):Лёд тронулся.Правда на stm32f103.
Ну вот, F4 не тянет, а F103 потянул.
ivan dimir писал(а):А как же мне строку отправить?
Способов много, от printf до всяких там xprintf.
Как вариант, самодельный
Спойлер

Код: Выделить всё

void tx_uart(char data)
{
	while (!(USART1->SR & USART_SR_TC));                     // 
	   USART1->DR=data;
}

void putstring ( char *str)
{  unsigned char i;
   for(i=0;str[i]!='\0';i++)
   tx_uart(str[i]);
}

putstring ("Hello World!");
Не помню, где, по умолчанию, строка хранится, вроде как в ОЗУ.
a797945
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

Re: stm32f4 cmsis usart +terminal1,9 b

Сообщение a797945 »

операцией ИЛИ "0" 1-цу не погасит, но при просто присвоении "1" и нет. Получается запись просто на память

Парамеиры в функцию передаются через запятую. Сколько параметров нужно MODIFY_REG(.......) ? как можно убрать запятую? проверяйте что вы хотите от регистра
Реклама
Эиком - электронные компоненты и радиодетали
jcxz
Мудрый кот
Сообщения: 1725
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: stm32f4 cmsis usart +terminal1,9 b

Сообщение jcxz »

[uquote="tonyk",url="/forum/viewtopic.php?p=4066709#p4066709"]Я выложил примеры настройки и тактирования, и УАРТ.
usart->SR &= ~USART_SR_TXE;[/uquote]
Так делать нельзя! Читайте описание регистра SR.
Правильная запись для сброса бита TXE: usart->SR = ~USART_SR_TXE;
Ваша запись, кроме того что не неоптимальна, так ещё и может сбрасывать другие случайные флаги.

Да и вообще смысл этого участка неясен... Видимо записали символ в буфер передачи теперь хотите чтобы вызвалось прерывание передачи (TXEIE)?
Но зачем-то перед его его разрешением пытаетесь сбрасывать флаг TXE. :facepalm:
Т.е. - если буфер передатчика был уже пуст к этому моменту, то флаг TXE стоял. Вы его принудительно сбросили и только потом разрешили прерывание TXEIE. Ну так оно никогда и не сработает, так как TXE принудительно сброшен.

Вообще флаги в регистре SR редко когда нужно принудительно сбрасывать. Они сбрасываются сами при определённых событиях (TXE - при записи символа в регистр передатчика).
Последний раз редактировалось jcxz Чт июл 29, 2021 18:06:04, всего редактировалось 2 раза.
Реклама
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: stm32f4 cmsis usart +terminal1,9 b

Сообщение Eddy_Em »

jcxz, ну что за бред? Бит TXE - read only! Сбрасывается он, если в DR что-то будет записано...
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Реклама
jcxz
Мудрый кот
Сообщения: 1725
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: stm32f4 cmsis usart +terminal1,9 b

Сообщение jcxz »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4067694#p4067694"]jcxz, ну что за бред? Бит TXE - read only! Сбрасывается он, если в DR что-то будет записано...[/uquote]Бред был в исходном коде (сброс TXE) в посте, на который я отвечал.
Если TXE - read only, то та строка вообще бессмысленна.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: stm32f4 cmsis usart +terminal1,9 b

Сообщение Eddy_Em »

Да там вообще много чего бессмысленного. И читать такой код страшно.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Ответить

Вернуться в «ARM»