Jump to content

    
Sign in to follow this  
aneox

stm32 uart kline 5baud slow init

Recommended Posts

а ну все правильно написано, все должно работать:)))...

 

вы шутите? какая разница как вы машете ногами, гораздо важнее как вы глушите UART чтобы начать на тех же ногах махать и как вы потом его обратно заводите.

что в этих функциях

kline_Serial_End();

kline_Serial_Start();

 

 

если данные идут, а прерывания нет, то варианты 3

1. Вы не настроили входную ногу на альтернативную функцию и не подключили ее к UART (настроили не на ту функцию, или сняли подтяжку и сделали ногу опен драин и т.д.).

2. Вы сняли флаг разрешения прерывания и не поставили его обратно.

3. Вы заглушили питание модуля UART может вместе с клоками и не включили ничего обратно и не настроили заново UART.

 

это и надо проверять, самое простое вывести значение регистров настройки после функции kline_Serial_Start(); а через некоторое время и значения флагов в регистре прерываний, и тогда будет понятно чего не настроилось...

 

я лично ставлю на то что когда вы ноги переопределяете у вас где-то стоит |= без сброса начального состояния, многие делают инициализацию исходя из того что регистры в начальном состоянии как после ресета. Потом меняют регистр в других настройках и вместо 0x00 он становится 0x04 (например), и когда они потом делают начальную настройку Reg |= 0x01; ждут что он станет 0х01, а он становиться 0х05 - а иногда это фатально.

Именно поэтому после сброса легчает, потому что регистры приводятся в исходное состояние....

 

И еще в HAL библиотеке постоянно проверяют состояние периферии, после глушения проверьте в структуре не ставиться ли какой-то дурной статус, при котором функции повторной инициализации вместо инициализации выйдет с ошибкой.

 

Ну и конечно неплохим тоном было бы собирать коды ошибок выполнения функций...

Share this post


Link to post
Share on other sites
mr_smit стесняюсь спросить, неужели не видно задержки тут ? vTaskDelayUntil(&xLastWakeTime, 300);

Вы уже столько кода привели что в каждую строчку не вникнешь. Я говорил про саму идею реализации. Где возможны грабли. Если вы это всё уже учли, то это хорошо. Надо дальше искать.

 

P.S. Тем не менее не понимаю почему бы не подключить бортовик к зажиганию и не морочить дальше голову.

Edited by mr_smit

Share this post


Link to post
Share on other sites

проверяйте функции DeInit она там тактирование случаем не отключает не сбивает? Потому что небось все клоки в одном месте настраиваются в начале программы, и там небось включаются все тактирования, а если в ДеИните тактирование выключается, то до ресета ничего обратно не включится...

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this