Перейти к содержанию
    

zaicev_ekb

Участник
  • Постов

    34
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные zaicev_ekb


  1. 16 hours ago, Сергей Борщ said:

    Не выставляется или вы не попадаете в последнее условие, потому что флаг сбрасывается после чтения SR и DR в первом условии? Полагаю, что все же второе. Я не знаком с кубом, но внимательно читаю документацию на контроллер и его регистры. Из этой документации становится понятно, что ваш обработчик написан неправильно:

    1) Нужно один раз в начале обработчика считать регистр статуса и потом во всех условиях работать со считанным значением, а не теребить SR при проверке каждого флага, как это делают недалекие авторы куба.

    2) Многие биты в этом регистре сбрасываются автоматически чтением DR после чтения SR и вызов USART_ClearITPendingBit на них никоим образом не влияет.

    Читайте справочное руководство (reference manual) на контроллер, а не только названия функций в кубе.

     

    Сергей спасибо за критику. Го это не HAL а SPL.

    Сделано как описывают сами ST в своем референсе.

    Даташит тоже читаю, и еррату тоже.

    За замечание еще раз спасибо.

    Буду пробовать.

    И в Кале перед функциями стоит префикс HAL. Халом я тоже не пользуюсь.

     

  2. On 7/7/2020 at 10:09 AM, haker_fox said:

    Логический анализатор на линии? Всё покажет сразу.

    Только на уровень физики и канала (по модели OSI);

    Сергей вопрос в продолжение

    Конфиг USART

     

        rs485_data.delay = br9600_timeout;
        USART_InitStructure.USART_BaudRate = br9600;
        USART_InitStructure.USART_WordLength          = USART_WordLength_9b;
        USART_InitStructure.USART_StopBits            = USART_StopBits_1;
        USART_InitStructure.USART_Parity              = USART_Parity_Even;     
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
        USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;
        
        USART_Init ( USART1, &USART_InitStructure );
        
        USART1->CR1 |= ( 1 << 10 ) | ( 1 << 8 );
        
        USART_ITConfig ( USART1, USART_IT_RXNE, ENABLE );
        USART_ITConfig ( USART1, USART_IT_NE, ENABLE );
        USART_ITConfig ( USART1, USART_IT_FE, ENABLE );
        USART_ITConfig ( USART1, USART_IT_ERR, ENABLE );

    обработка прерывания

     

        if ( USART_GetITStatus ( USART1, USART_IT_RXNE ) != RESET ) {
            USART_ClearITPendingBit ( USART1, USART_IT_RXNE );
            
            rs485_data.rxtimer = 0;
            if ( rs485_data.rxcnt - 2 > ( RX_BUF_SIZE ) ) {
                rs485_data.rxcnt = 0;
            }
            rs485_data.buffer_rx[rs485_data.rxcnt] =  USART1->DR & (uint16_t)0x01FF;
            
            rs485_data.rxcnt++;
            rs485_data.symbol_first = 1;
            rs485_data.rxtimer = rs485_data.delay ;
        }
        
        if ( USART_GetITStatus ( USART1, USART_IT_TC ) != RESET ) {
            USART_ClearITPendingBit ( USART1, USART_IT_TC );
            rs485_dir_off();
            rs485_data.txend = 0;
            USART_ITConfig ( USART1, USART_IT_TC, DISABLE );
            rs485_data.Status_Tx = Tx_End;
        }
        
        if ( USART_GetITStatus ( USART1, USART_IT_TXE ) != RESET ) {
            USART_ClearITPendingBit ( USART1, USART_IT_TXE );
            
        }
        
        if ( USART_GetITStatus ( USART1, USART_IT_LBD ) != RESET ) {
            USART_ClearITPendingBit ( USART1, USART_IT_LBD );
            rs485_data.Status_Rx = Rx_Error;
        }
        
        if ( USART_GetITStatus ( USART1, USART_IT_ORE  ) != RESET ) {
            USART_ClearITPendingBit ( USART1, USART_IT_ORE  );
            rs485_data.Status_Rx = Rx_Error;
            rs485_data.buffer_rx[rs485_data.rxcnt] = USART_ReceiveData ( USART1 );
            rs485_data.rxcnt++;
        }
        
        if ( USART_GetITStatus ( USART1, USART_IT_FE ) != RESET ) {
            USART_ClearITPendingBit ( USART1, USART_IT_FE );
            USART_ClearITPendingBit ( USART1, USART_IT_PE );
            rs485_data.Status_Rx = Rx_Error;
            rs485_data.symbol_first = 0;
        }
        
        if ( USART_GetITStatus ( USART1, USART_IT_PE ) != RESET ) {
            USART_ClearITPendingBit ( USART1, USART_IT_PE );
            rs485_data.Status_Rx = Rx_Error;
            rs485_data.symbol_first = 0;
        }

    При приеме байта в прерывание заходим но соответсвующий флаг PE не выставляется в регистре SR не выставляется

  3. 29 minutes ago, Сергей Борщ said:

    В сторону обработки ошибок по приему, например. Биты данных во всех посылках совпадают, биты четности для приемника с отключенной проверкой четности должны вызывать ошибку приема стопового бита (framing error). В вышей программе эта ошибка, вероятно, не обрабатывается. А поскольку биты данных во всех форматах совпадают - посылка принимается правильно.

    Спасибо за волщебный пендель

    буду копать

  4. Доброго времени суток всем.

    Столкнулся с непонятным явлением

    USART сконфигурированный с одними параметрами связи, отвечает на запросы с другими параметрами связи

    Куда копать уже не знаю

    Ни кто не сталкивался с подобным?

    Modbus RTU Scaner.jpg

  5. Такое ощущение что вы просто хотите набить свое портфолио чужими работами.

    Сроки?

    Оплата?

    Или вы думаете что все кинуться к вам?

    И будут наперебой предлагать?

  6. Обязанности:

    -разработка ПО микроконтроллеров(STM32, AVR);

    -разработка аппаратной части электронных узлов и блоков(цифровая техника, аналоговая техника);

    -разработка документации (конструкторской или программной).

    Требования:

    -высшее образование и стаж работы 3-5 лет;

    -опыт работы с аналоговой и цифровой схемотехникой;

    -опыт разработки ПО микроконтроллеров на языке Си;

    -знание основных интерфейсов UART, CAN, I2C, SPI;

    Условия:

    возможен гибкий график;

    работа в центре около станции метро;

    оформление и ЗП в соответствии с ТК РФ.

    Оплата от 50 000р в месяц "белой на руки" стабильно.

     

    Просим направить резюме с контактами.

     

    [email protected]

    или

    [email protected]

    или

    +7 963 036 01 01

     

    Вакансия еще актуальна?

    Совмещенка или удаленка возможна?

     

  7. спасибо за замечания. Учту в следующий раз. 2р не многовато ли за один файл описания? Возможно ли помочь сделать проект целиком? ТЗ будет чуточку позже

     

    Плата должна по сети принимать пакеты, которые должна писать во флеш. По-хорошему на флешках должна быть файловая система, чтобы писать файлами. ОС использовать нельзя

     

    Тогда предлагаю вам сначала определится со всеми хотелками - свистелками. И все это оформить в виде ТЗ. А потом уже можно говорить о сроках и деньгах.

×
×
  • Создать...