21.09.2012, 13:13
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Чавой-то загрузка флеши быстрой командой в Keil через ST-Link заработала.
Обновляйте ST-Link. Особенно STLinkUSBDriver.dll
|
|
|
|
21.09.2012, 21:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,300
Сказал спасибо: 461
Сказали Спасибо 526 раз(а) в 273 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Подскажите, пожалуйста.
Что я делаю неправильно в инициализации RTC- часы сбрасываются при каждом включении, хотя функцию резервной батареи подключаю:
Код:
|
void RTC_Configuration(void)
{
/* Enable PWR and BKP clocks */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
/* Allow access to BKP Domain */
PWR_BackupAccessCmd(ENABLE);
/* Reset Backup Domain */
BKP_DeInit();
/* Enable LSE */
RCC_LSEConfig(RCC_LSE_ON);
/* Wait till LSE is ready */
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
{}
/* Select LSE as RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/* Enable RTC Clock */
RCC_RTCCLKCmd(ENABLE);
/* Wait for RTC registers synchronization */
RTC_WaitForSynchro();
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();
/* Enable the RTC Second */
RTC_ITConfig(RTC_IT_SEC, ENABLE);
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();
/* Set RTC prescaler: set RTC period to 1sec */
RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
/* Wait until last write operation on RTC registers has finished */
RTC_WaitForLastTask();
} |
Последний раз редактировалось IOPA4; 21.09.2012 в 21:14.
|
|
|
|
21.09.2012, 21:12
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Ловите готовую библиотеку для RTC. Только сегодня проверял - все работает.
Инитиализация:
Запись:
Код:
|
const RTC_t SetDateAndTime={2012, 9, 21, 5, 12, 7, 0, !0}; |
Код:
|
rtc_settime(&SetDateAndTime); |
Чтение:
Код:
|
RTC_t DateAndTime;
rtc_gettime(&DateAndTime) |
Код:
|
typedef struct {
uint16_t year; /* 1..4095 */
uint8_t month; /* 1..12 */
uint8_t mday; /* 1.. 31 */
uint8_t wday; /* 0..6, Sunday = 0*/
uint8_t hour; /* 0..23 */
uint8_t min; /* 0..59 */
uint8_t sec; /* 0..59 */
uint8_t dst; /* 0 Winter, !=0 Summer */
} RTC_t; |
|
|
|
Эти 2 пользователя(ей) сказали Спасибо Easyrider83 за это сообщение:
|
|
|
21.09.2012, 23:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,300
Сказал спасибо: 461
Сказали Спасибо 526 раз(а) в 273 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
Ловите готовую библиотеку для RTC. Только сегодня проверял - все работает.
|
Спасибо, действительно работает!!!
|
|
|
|
23.09.2012, 23:56
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Работаю сейчас с 407 камнем. Обратил внимание, на такую вещь. В stm32f2xx и 4xx применён новый RTC. Значительно более грамотный. А библиотеку они вынуждены делать совместимую. Получается плохо. Значительно удобнее было библиотеки для старого камня "допилить" до нового. Но тогда будут кинутыми те, кто уже использовал старую библиотеку. Вот и получается у них бредятина.
Я для себя не стал ничего городить. 4xx/2xx буду впрямую использовать, а если буду прикручивать 1хх/0хх, то напишу библиотеку соответствующую, для совместимости.
Поэтому ST-шную библиотеку крайне не рекомендую использовать.
Кроме того новый RTC ближе к другим камням. Например к LPC. Всётаки на него и следует равняться.
|
|
|
|
27.09.2012, 15:46
|
|
Прописка
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
задолбал раздутый код стандартной либы и либы от ST.
особенно "радуют" memcpy и memset: http://codetidy.com/3636/
можно ли как-то заменить своей реализацией ?
Последний раз редактировалось polyname; 27.09.2012 в 15:51.
|
|
|
|
27.09.2012, 16:10
|
|
Прописка
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
![Улыбка](images/smilies/icon_smile.gif) заменил простыми циклами, бинарник сократился почти на 500 байт ! http://codetidy.com/3637/
это капец, видимо придется перекопать всю стандартную либу...
|
|
|
|
27.09.2012, 22:26
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
polyname такие вещи не по размеру оценивают а по скорости. ты свое произведение тестировал?
у меня к примеру если есть выбор сделать на 10% быстрее, заплатив за это несколькими кб флеша - выигрывает всегда скорость, т.к. большая часть флеша все равно не используется.
в либе используется блочная пересылка, а теперь посмотри на свой листинг - там 1 передача на 10-20 прочих команд будет.
|
|
|
|
27.09.2012, 23:22
|
|
Прописка
Регистрация: 19.05.2012
Сообщений: 99
Сказал спасибо: 0
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Цитата:
|
у меня к примеру если есть выбор сделать на 10% быстрее, заплатив за это несколькими кб флеша - выигрывает всегда скорость
|
у меня наоборот - в большинстве проектов контроллер редко когда загружен больше 20%, в основном обновляет индикацию и клавиатуру. Там где нужна скорость - используются прерывания, блочные пересылки на скорость реакции не влияют. Несколько Кб флеша - слишком жирно, если их всего 16 (в STM32F100C4T6).
Цитата:
|
в либе используется блочная пересылка, а теперь посмотри на свой листинг - там 1 передача на 10-20 прочих команд будет.
|
я вижу, скорее всего используется давно известный Duff device - частично развернутый цикл. Только нахрена он мне, пересылки и заполнение буферов выполняются очень редко, в основном при старте программы, плюс-минус несколько миллисекунд - ерунда, никто и не заметит. А сэкономленных несколько сотен байтов флеша - очень пригодятся...
Подозреваю что соптимизировав похожим образом и StdPeriph library можно вообще ужать код до 50%...
ну их в пень, этих индусов...
Последний раз редактировалось polyname; 27.09.2012 в 23:38.
|
|
|
|
27.09.2012, 23:53
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
polyname пользуешься StdPeriphLibrary и контроллеры с 16к флеша... ты порвал мой мозх
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:21.
|
|