Заголовок сообщения: Re: Stm32 с чего начать изучение...
Добавлено: Вт фев 14, 2012 14:43:35
Друг Кота
Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36 Сообщений: 7439 Откуда: г. Москва
Рейтинг сообщения:0
IfoR писал(а):
:facepalm: Да что же вы сразу меня в эту надпись не тыкнули? Я то думал оно АЦП питает. Не заметил я этого. Теперь всё заработало. Спасибо!
Зачем додумать то, что явно написано ? Теперь ты осознаешь, что все эти твои страдания от того, что надо было реально 2-3 странички из выложенного мной документа прочитать ? Почитай хотя бы этот документ от и до. 28 страниц, включая содержание и ссылки, уже от кучи глупостей и непониманий избавит.
Ну вот начал изучать stm32 + MMC + FatFs. В принципе все заработало. В примерах подключения карты часто используется программный SPI. При работе на частоте 24 МГц получается скорость SPI около 1 Мбита. Захотелось перевести на аппаратный SPI2, но при этом карта инициализируется на скорости до 125 кбит. Быстрее-вылазит ошибка. Вот кусочек инициализации и чтения /записи.
Код:
RCC->APB1ENR |= RCC_APB1ENR_SPI2EN; //подать тактирование / SPI2->CR1 = 0x0000; //очистить первый управляющий регистр SPI2->CR2 = 0x0000; //очистить второй управляющий регистр SPI2->CR1 |= SPI_CR1_MSTR; //контроллер должен быть мастером SPI2->CR1 |= 0x30; //задаем скорость 30=8*4мкс SPI2->CR1 |= SPI_CR1_SPE; //разрешить работу модуля SPI
Код:
void xmit_spi(unsigned char data) {/* unsigned char i; for (i=0;i<8;i++) //Цикл перебора битов отправляемого байта { if ((data&0x80)==0x00)//Если все данные переданы { GPIOB->ODR &=~0x0001; //Выставить бит данных } else GPIOB->ODR|=0x0001; data=data<<1; GPIOB->ODR|=0x0004; //Импульс GPIOB->ODR&=~0x0004; } */ while (SPI2->SR & SPI_SR_BSY); while (!(SPI2->SR & SPI_SR_TXE)); SPI2->DR = data; // Передача данных }
Код:
static BYTE rcvr_spi (void) { /* //Декларация переменных unsigned char i, res=0; for(i=0;i<8;i++) { GPIOB->ODR|=0x0004; //Фронт импульса res=res<<1; if ((GPIOB->IDR&0x0002)!=0x00) res=res|0x01; //Считать бит данных GPIOB->ODR&=~0x0004; //Спад испульса } */ while (SPI2->SR & SPI_SR_BSY); SPI2->DR = 0xff; while (!(SPI2->SR & SPI_SR_RXNE)); res = SPI2->SR; res = SPI2->DR; return res ; }
закомментирован программный SPI. Подскажите где может быть ошибка?
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Господа, а кто-нибудь использовал FreeRTOS в своих проектах? Если таковые люди имеются, я попросил бы, если не сложно, разъяснить мне один момент по поводу приоритетов задач. У Курница я вычитал следующую вещь:
Код:
Среди всех задач, находящихся в состоянии готовности, планировщик отдаст управление той задаче, которая имеет наивысший приоритет. Задача будет выполняться до rex пор, пока она не будет блокирована или приостановлена или пока не появится готовая к выполнению задача с более высоким приоритетом.
Таким образом, не значит ли это, что если я имею две задачи (скажем, светодиодные те же мигалки - пусть будут синяя и красная) с одинаковым приоритетом (пусть tskIDLE_PRIORITY=0), и вдруг установлю приоритет первой задачи равным (tskIDLE_PRIORITY+1), то выполняться будет только лишь эта самая первая задача - вплоть до принудительной приостановки или понижения приоритета? А вторая задача что - уйдет в суспенд? Непонятен мне этот нюанс. Если так, то с приоритетами вообще становится опасно баловаться..
_________________ pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего ) MrYuran: Самые ортодоксальные — это PICудеи ) Katz: Не, 51-ники. )
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: Stm32 с чего начать изучение...
Добавлено: Ср фев 29, 2012 09:55:22
Друг Кота
Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36 Сообщений: 7439 Откуда: г. Москва
Рейтинг сообщения:0
Это уж как ты задачу с высшим приоритетом организуешь "пока она не будет блокирована или приостановлена"
Приостанволена - это ж не значит, что снаружи. Если ты вызвал внутри Sleep(), ожидание события или разблокировки мутекса - это и есть блокировка, по которой шедулер начинает выполнять менее приоритетные задачи до наступления события, ведущего к разблокировке
Спасибо, с блокировкой понятно. А насчет организации задачи - имеется в виду, будет ли задача ожидать наступления какого-либо события (иное условие для блокировки), чтобы планировщик мог выделить процессорное время другим задачам? Скажем, если задача будет постоянно в состоянии готовности (те же шморгалки ведь не требуют наступления особых условий), и ее приоритет будет выше приоритетов других задач, то планировщик будет выделять время только ей? Я просто запутался с приоритетами - считал, что задача с высшим по отношению к другим приоритетом будет выполняться первой (какой-то квант времени), а потом планировщик переключится на другую задачу..
_________________ pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего ) MrYuran: Самые ортодоксальные — это PICудеи ) Katz: Не, 51-ники. )
Заголовок сообщения: Re: Stm32 с чего начать изучение...
Добавлено: Ср фев 29, 2012 10:32:00
Друг Кота
Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36 Сообщений: 7439 Откуда: г. Москва
Рейтинг сообщения:0
SubDia писал(а):
Я просто запутался с приоритетами - считал, что задача с высшим по отношению к другим приоритетом будет выполняться первой (какой-то квант времени), а потом планировщик переключится на другую задачу..
Будет время - конечно переключится -)))
Если будешь вместо Sleep пользовать конструкции типа for(volatile int i=0; i < 1000000; ++i) ; то проблемы будут -)))
Да и в FreeRTOS, насколько помню, есть разные настройки и режимы. Вплоть до выбора вытесняющая/добровольная многозадачность.
Если будешь вместо Sleep пользовать конструкции типа for(volatile int i=0; i < 1000000; ++i) ; то проблемы будут -)))
Уже были. Благодарю за ответ. Я пока только начал изучать эту ОС.
_________________ pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего ) MrYuran: Самые ортодоксальные — это PICудеи ) Katz: Не, 51-ники. )
Да и в FreeRTOS, насколько помню, есть разные настройки и режимы. Вплоть до выбора вытесняющая/добровольная многозадачность.
Все верно, добрел наконец-то до этого. У меня в конфиге политика планирования - преимущественная (configUSE_PREEMPTION=1), то есть всегда (постоянно) выполняется задача с наивысшим приоритетом, задачи с одинаковым приоритетом делят процессорное время. На практике давно дошло, вот нашел и теоретическое подтверждение. =)
_________________ pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего ) MrYuran: Самые ортодоксальные — это PICудеи ) Katz: Не, 51-ники. )
А у меня такой вопрос немного не в тему: У STM32 есть регистры для атомарного управления битами в порту: BSRR и BRR. Первый может как устанавливать, так и сбрасывать биты, а второй только сбрасывать. Зачем тогда нужен BRR?
У STM32 есть регистры для атомарного управления битами в порту: BSRR и BRR. Первый может как устанавливать, так и сбрасывать биты, а второй только сбрасывать. Зачем тогда нужен BRR?
У них маска одного бита на одном и том же месте. То есть, сбросить бит номер N - BRR = 1<<N, установить - BSRR = 1<<N. Иногда это может быть удобно, не надо двигать маску туда-сюда.
что-то в той документации ни структур не черта нету
Если Вы о stm32, то документация состоит из datasheet - описание электрических параметров и reference manual - описание периферии в том числе ее регистров. reference manual обычно один на все семейство в datasheet перечислено какая конкретно периферия есть в конкретном контроллере и на какие ноги она выведена.
Сейчас этот форум просматривают: ESASHA и гости: 9
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения