04.10.2011, 10:11
|
#861
|
Прописка
Регистрация: 15.11.2007
Адрес: СПБ
Сообщений: 214
Сказал спасибо: 37
Сказали Спасибо 42 раз(а) в 34 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от EugenPKH
|
В том то и дело , что у меня новый кеил а в нем драйвера st_link V2 и первый он не видит в упор .
st link firmware update от первого видит мою дискавери и обновляет до v1.J12.S0, а от второго не видит и соответственно до v2 не обновлят .
А как обновить V1 до v2 так и не пойму
|
В этой теме уже поднимался вопрос - нужно подложить кейлу старую длл для ст-линка и все работает. И сама дллка выкладывалась - поищите.
|
|
|
|
04.10.2011, 10:45
|
#862
|
Частый гость
Регистрация: 25.03.2010
Адрес: Voronezh
Сообщений: 35
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от dccharacter
|
Ну вот, например, пытаюсь понять разницу между interrupt flag и pending bit. Есть две пары функций:
TIM_GetITStatus — TIM_ClearITPendingBit
и
TIM_GetFlagStatus — TIM_ClearFlag
Например мой код (переключение светодиода по переполнению таймера)
|
Если посмотрите исходник stm32f10x_tim.c то обнаружите, что разницы в этих функциях вообще нет - она сбрасывает биты в регистре SR.
Если посмотреть RM, то обнаружите, что в этом регистре находятся биты признака прерывания и биты признака пропуска захвата. Одни из них назвали битами ожидания (pending) прерывания, другие флагами. Все. Вся разница.
По поводу сброса pending bits Вы не правы. Они сбрасываются софтверно. Читаем RM
CC1IF
This bit is set by hardware on a capture. It is cleared by software or by reading the
TIMx_CCR1 register.
Этот бит устанавливается оборудованием при захвате. Он очищается программно, или автоматически при чтении регистра CCR1. Нужно внимательней читать.
Кроме того Вы можете путать флаги ожидания прерывания в периферии и в NVIC. Поведение первых описано в RM вторых - в описании ядра процессора. Дело в том что одно и тоже прерывание может быть вызвано разными причинами. При этом в периферии устанавливаются разные флаги прерывания (pending bits), которые нужно проверять в обработчике ( если источник не один). А в NVIC при установке любого из флагов оборудования выставляется один флаг прерывания. Он то и очищается при входе в прерывание. Cуществует 2 разных набора битов, относящихся к прерываниям, один из них находится в контроллера NVIC, второй в оборудовании в одном из регистров. Работа с ними происходит по-разному!! Это непривычно при переходе с архитектур, у которых по каждый источник по одному прерыванию. Здесь источников может быть несколько, а прерывание (и соответсвенно обработчик), только один. Этот один обработчик вызывается при возникновении любой из причин прерывания. В обработчике Вы должны проверить флаги и выяснить источник прерывания. Потом сбросить эти флаги явно либо чтением регистра. Конечто, если включен только один источник прерывания, то проверять ничего не надо - причина всегда одна и та же. Но Очищать флаг все равно нужно вручную. Оборудование не знает, включите ли Вы дополнительный источник или нет.
|
|
|
|
04.10.2011, 13:53
|
#863
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Еще раз вернусь к I2C. Если перед каждым обращением к EERPOM заново инициализировать I2C, все работает.
Откуда берется второй байт при чтении пока загадка. Хотя процедура отрабатывает верно.
Разобрался. Полная инициализация не нужна. Достаточно только выключать шину командой
I2C_Cmd(I2C1, DISABLE); после процедуры и включать аналогично до процедуры.
Неизвестный байт назвал "густ байтом" и решил с приведениями больше не шутить.
Последний раз редактировалось Easyrider83; 04.10.2011 в 15:07.
|
|
|
|
04.10.2011, 15:17
|
#864
|
Временная регистрация
Регистрация: 26.09.2009
Сообщений: 81
Сказал спасибо: 4
Сказали Спасибо 16 раз(а) в 13 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от espectr0
|
STM32VLDISCOVERY: через USART отправляю каждые полсекунды пресловутый Hello World и мигаю светодиодом - при отладке все ок, а при подаче питания (без отладки) светодиод мигает, а в терминалке ничего.. Пробовал USART1,2 .
Что может быть?
|
У всех УСАРТ на дискавери работает нормально?
Раз проблема только у меня попробую купить новый контроллер и впаять в плату..
|
|
|
|
04.10.2011, 15:19
|
#865
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от espectr0
|
У всех УСАРТ на дискавери работает нормально?
Раз проблема только у меня попробую купить новый контроллер и впаять в плату..
|
Проверял не так давно UART1. Все отлично.
|
|
|
|
04.10.2011, 16:28
|
#866
|
Вид на жительство
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Добрался я наконец до RTC. Все работает, но один вопрос мне не дает покоя. Итак, у часиков в 100-й серии есть 32-битный счетный регистр CNT. Но на адресное пространство он отображается как 2 32-битных регистра(у которых используется по 16 младших разрядов). Получается чтобы прочитать время мне нужно считать сначала один, а потом другой адрес и путем логических операций получить действительное значение этого регистра. Но есть вероятность, что при чтении в произвольный момент времени может случиться так:
1)читаем регистр CNTH
2)в этот момент поступает секундный импульс с предделителя и содержимое CNT успело обновиться и ресинхронизироваться
3)читаем уже новое значение CNTL и в результате имеем полностью неверный результат времени.
У AVR-ок помню, что при чтении длинных регистров их содержимое копируется в специальные буферные регистры и такая проблема отсутсвует. По STM32 смотрел мануалы и апноты, но ничего толком не нашел.
В голове созрело неcколько решений:
1) по секундному прерыванию считывать в глобальную переменную:
PHP код:
|
/*--------------------------------------------------------
RTC IRQ - 1 second interval
---------------------------------------------------------*/
void RTC_IRQHandler(void)
{
sys_time = (((uint32_t)RTC-›CNTH)‹‹16) | (RTC-›CNTL);
RTC-›CRL &= ~RTC_CRL_SECF;
}
|
2) как подсказал знакомый, считать два раза подряд CNT, и если содержимое одинаково, то результат верный, иначе - перечитать снова.
У кого какие идеи по этой теме?
ЗЫ. На плате VL-DISCOVERY возле STM32F100RB начал болтаться 8МГц кварц. Оказывается он стоит в разъеме, я даже не подозревал))
|
|
|
|
04.10.2011, 16:58
|
#867
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Кто-нибудь может поделиться кодом для работы с SD картой через SPI?
В примерах Keil есть только для SDIO.
|
|
|
|
04.10.2011, 17:36
|
#868
|
Частый гость
Регистрация: 07.03.2011
Сообщений: 38
Сказал спасибо: 1
Сказали Спасибо 19 раз(а) в 16 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
Кто-нибудь может поделиться кодом для работы с SD картой через SPI?
В примерах Keil есть только для SDIO.
|
В чем проблема -- поставить птичку и подложить другой файл драйвера?
|
|
|
Сказали "Спасибо" Gaaaaaad
|
|
|
04.10.2011, 17:37
|
#869
|
Частый гость
Регистрация: 11.05.2010
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
если файловая система Petit_FAT устроит проект в архиве
|
|
|
Эти 2 пользователя(ей) сказали Спасибо FROG45 за это сообщение:
|
|
|
04.10.2011, 17:40
|
#870
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Gaaaaaad
|
В чем проблема -- поставить птичку и подложить другой файл драйвера?
|
Откуда такой проектик? Можете прилепить?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:21.
|
|