реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> STM32F1->MCO качество сигнала
ViKo
сообщение Jun 3 2013, 08:20
Сообщение #16


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(scifi @ Jun 1 2013, 22:22) *
Всегда манипулировал регистрами, опираясь только на Reference Manual. Всё получалось. Библиотеку не использовал из-за неприязни (кривой она показалась)...

Аналогично. Но вот, подбираюсь к USB, и, поскольку дело новое и, говорят, тяжелое, не знаю, что лучше - разбираться самому с битами или 05.gif разбираться с функциями (и потом все равно с битами).
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 3 2013, 11:32
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



2 раза на 2 разных процах написал без библиотек по мануалу.
В обоих случаях нашел несколько ошибок в предложенных примерах реализации, и пару неточностей...
Фиг знает, может это старость и консерватизм, но так я и не научился доверять чужому бесплатному коду без проверки...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 3 2013, 19:51
Сообщение #18


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Golikov A. @ Jun 3 2013, 14:32) *
2 раза на 2 разных процах написал без библиотек по мануалу.

Вы говорите об USB или, вообще, о программе для микроконтроллера?
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Jun 4 2013, 01:49
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(koyodza @ Jun 1 2013, 18:29) *
Проверьте, не установлен ли бит CLKEN в USART1->CR2

Сначала как раз так и было. И на выходе наблюдал клок от USART. Но на момент создания топика, режим USART был изменен на асинхронный.

Цитата(koyodza @ Jun 1 2013, 18:29) *
Как раз при отказе от библиотечных функций часто и возникают ошибки, связанные с неправильной инициализацией периферии.

Именно потому и спросил, сталкивался кто-либо с подобным.

Цитата(koyodza @ Jun 1 2013, 18:29) *
Поэтому прежде, чем писать свои функции, напрямую работающие с регистрами, лучше вначале взять и разобраться со стандартными, понять где и что не нравится, и только потом уже писать свои

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

Код
...
typedef    enum    STM32_USART_SR_e
{
    STM32_USART_SR_PE                            =     0,
    STM32_USART_SR_FE                            =     1,
    STM32_USART_SR_NE                            =     2,
    STM32_USART_SR_ORE                            =     3,
    STM32_USART_SR_IDLE                            =     4,
    STM32_USART_SR_RXNE                            =     5,
    STM32_USART_SR_TC                            =     6,
    STM32_USART_SR_TXE                            =     7,
    STM32_USART_SR_LBD                            =     8,
    STM32_USART_SR_CTS                            =     9
}    STM32_USART_SR;

typedef    enum    STM32_USART_CR1_e
{
    STM32_USART_CR1_SBK                            =     0,
    STM32_USART_CR1_RWU                            =     1,
    STM32_USART_CR1_RE                            =     2,
    STM32_USART_CR1_TE                            =     3,
    STM32_USART_CR1_IDLEIE                        =     4,
    STM32_USART_CR1_RXNEIE                        =     5,
    STM32_USART_CR1_TCIE                        =     6,
    STM32_USART_CR1_TXEIE                        =     7,
    STM32_USART_CR1_PEIE                        =     8,
    STM32_USART_CR1_PS                            =     9,
    STM32_USART_CR1_PCE                            =    10,
    STM32_USART_CR1_WAKE                        =    11,
    STM32_USART_CR1_M                            =    12,
    STM32_USART_CR1_UE                            =    13,
    STM32_USART_CR1_OVER8                        =    15
}    STM32_USART_CR1;

...


В реальности, с учетом нехватки времени, процесс выглядит немного иначе.при необходимости задействовать в очередном проекте ту или иную периферию, под нее создается библиотека. В общем, конечно, она проверяется на предмет всех режимов, но понятно дело, что проблемы вылезают только в тех режимах, которые используются в данном проекте. На примере того же USART - если на момент создания библиотеки, в проекте использовался асинхронный режим, по понятным причинам именно он протестирован наиболее тщательно.
С другой стороны, единообразие, при кодировании, позволяет свести потенциальные ошибки к минимуму.



Цитата(scifi @ Jun 1 2013, 23:22) *
Всегда манипулировал регистрами, опираясь только на Reference Manual. Всё получалось. Библиотеку не использовал из-за неприязни (кривой она показалась). Сейчас, однако, мог бы и потерпеть неприязнь, если библиотека реально ускоряет разработку: жизнь слишком коротка. Старею, наверное :-)

Подход, конечно, правильный. Но я, например, последнее время, постоянно сталкиваюсь с невысоким качеством кода. Собсно, последний раз, когда я видел/использовал пристойный код от производителей микроконтроллеров, это был USB-стек от Атмел - хорошо типизированый, с вменяемой структурой.
Что касается библиотек, то помнится напарывался у того же Атмел, в ней же была проблема при работе с SPI, что-то касательно SS. А про ST даже говорить не хочу.

Цитата(DASM @ Jun 1 2013, 19:28) *
Да никто не против, а еще лучше - привести кусок дизасма, но автор убежал.

Нет, .... Никто, никуда не убежал. Все банальнее:

2. ... нахожусь в сильном цейтноте.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 4 2013, 05:35
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(ViKo @ Jun 3 2013, 23:51) *
Вы говорите об USB или, вообще, о программе для микроконтроллера?


про УСБ конечноsm.gif)), если бы я всего 2 программы написал, я бы постеснялся вообще говоритьsm.gif на армах и на 51 ядре на двух разных контроллерах с подержкой усб. Причем на 51 ядре было очень низкоуровневая поддержка, там очень много чего надо было руками делать, в армах намного проще сейчас. В первом случае ушло около 2 месяцев, но я там еще и стандарт усб изучал, во втором случае около месяца с отладкой.

Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 4 2013, 06:30
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ Jun 3 2013, 14:20) *
Аналогично. Но вот, подбираюсь к USB, и, поскольку дело новое и, говорят, тяжелое, не знаю, что лучше - разбираться самому с битами или 05.gif разбираться с функциями (и потом все равно с битами).

Если на LPC (ARM7 и Cortex-M3) - я использовал стек из примеров NXP. Что-то в нём переделал/оптимизировал, на что-то закрыл глаза. Но можно его юзать и как есть - вполне работоспособный хоть и не оптимальный.
Использовал control- и изохронные передачи, с DMA и без.
На OMAP-L137 пришлось писать свой стек, так как варианты были - или брать готового кота в мешке со встроенной непонятной ОС и в бинарниках (а по объёму занимаемых ресурсов - не кота, а слона), или из-за стека тащить в нормально работающую реалтайм-систему линух.
Использовал и на 51-ядре, но это отдельная песня.
На написание стека на ARM-ядро OMAP у меня примерно так же как и у уважаемого Golikov A. ушло около месяца (на базе знаний полученных ранее при использовании стеков от NXP).
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 8th July 2025 - 19:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01316 секунд с 7
ELECTRONIX ©2004-2016