10.10.2011, 16:43
|
#901
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от st_1
|
either on VDD supply when present or through the VBAT pin
|
А если нет ни того ни другого? Ионистор вешать?
|
|
|
|
11.10.2011, 17:31
|
#902
|
Частый гость
Регистрация: 25.03.2010
Адрес: Voronezh
Сообщений: 35
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от ut1wpr
|
А если нет ни того ни другого? Ионистор вешать?
|
У ST есть AN по применению флеша в качестве EEPROM. Идея там следующая. Выделяется 2 или более сегментов флеша. По мере изменения в конец сегмента добавляются изменившиеся данные. Последние данные считаются достоверными. Свободное место заполнено -1.
Так что если нужно сохранять только 100 байт, то целиком страницы будут перезаписываться в 20 раз реже (2 страницы по килобайту разделить на 100).
Две страницы обеспечивают гарантию сохранности данных при переписывании из одной страницы в другую.
Если выделите 2 страницы флеша под 256 байт информации, считайте что у вас EEPROM с 100000 циклов перезаписи размером 256 байт.
|
|
|
|
11.10.2011, 17:35
|
#903
|
Вид на жительство
Регистрация: 21.11.2009
Сообщений: 342
Сказал спасибо: 4
Сказали Спасибо 149 раз(а) в 66 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Цитата:
|
10000 циклов? Я в шоке, т.е. о сохранении настроек по выкл видимо придется забыть.
|
бред. у каждого производителя есть кучи аппнотов на тему "Reliable data storage", было бы желание что-то искать и самостоятельно делать, а не визжать на форуме
|
|
|
|
11.10.2011, 17:45
|
#904
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Подскажите, почему прерывание либо вообще не начинает работать, либо чуть поработав, перестает вызываться? Дебаггером этот момент выложить не получается.
К порту В линиям 0 и 1 подключен энкодер. Выводы настроены Pull Up, прерывание по первой линии. По второй смотрим направление вращения. На дисплее видим результат. Ничего, короче говоря, не работает. Хотя прерывание вроде бы отрабатывается, но потом почему-то перестает вызываться. Хотя иногда не вызывается прямо с самого начала. Не понятно мне это.
Код:
|
#include ‹stm32f10x_lib.h›
#include "delays.h"
#include "LCDv1.h"
#include "stm32_GPIO.h"
extern stm32_Init(void);
void led_flash(int LENn);
#define BLUE_LED GPIO_Pin_8
#define GREEN_LED GPIO_Pin_9
u8 cnt=0;
u8 flag=0;
u8 tmp=0;
int main(void)
{
stm32_Init();
GPIOB-›BSRR=GPIO_Pin_0|GPIO_Pin_1;
LCD_init();
LCD_Send_Cmd(LCD_CMD_Cursor_Off);
lcd_print_string("HELLO");
while(1)
{
led_flash(GREEN_LED);
delay_ms(100);
if (flag!=0)
{
flag=0;
LCD_Send_Cmd(LCD_CMD_Clear);
LCD_Send_Cmd(LCD_CMD_First_Row);
tmp=cnt;
while(tmp!=0)
{
lcd_print_char(0xFF);
tmp--;
}
tmp=0;
}
}
}
void EXTI0_IRQHandler (void)
{
led_flash(BLUE_LED);
if ((GPIOB-›IDR&GPIO_Pin_1)!=0){cnt++;flag=0xff;}else{cnt--;flag=0xff;}
if (cnt›=20)cnt=0;
EXTI-›PR |= EXTI_Line0;
} |
Предполагаю, что причина - дребезг. Но энкодер маслянный. Не должен так трещать.
Как выключить и затем включить прерывание?
Последний раз редактировалось Easyrider83; 11.10.2011 в 17:49.
|
|
|
|
11.10.2011, 18:25
|
#905
|
Частый гость
Регистрация: 25.03.2010
Адрес: Voronezh
Сообщений: 35
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
Подскажите, почему прерывание либо вообще не начинает работать, либо чуть поработав, перестает вызываться? Дебаггером этот момент выложить не получается.
|
Возможно было вызвано еще одно прерывание. Для него был вызван обработчик по умолчанию - бесконечный цикл. Посмотрите в каком месте ходит отладчик. Надо смотреть окно ассемблера. Если это не Ваш main - то причина в этом.
|
|
|
|
11.10.2011, 18:39
|
#906
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
Дебаггером этот момент выложить не получается.
|
А в Fault Reports заглянуть???
|
|
|
|
11.10.2011, 18:46
|
#907
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Oleg Galizin
|
Возможно было вызвано еще одно прерывание. Для него был вызван обработчик по умолчанию - бесконечный цикл. Посмотрите в каком месте ходит отладчик. Надо смотреть окно ассемблера. Если это не Ваш main - то причина в этом.
|
Нет, этот вариант исключается. И вот почему - зеленый диодик продолжает моргать. Основной цикл выполняется.
Сообщение от st_1
|
А в Fault Reports заглянуть???
|
Ниразу не пользовался. А чего там?
Отловать момент срабатывания энкодера не получается.
|
|
|
|
11.10.2011, 18:55
|
#908
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Вы с битами накосячили...
GPIOB-›BSRR= GPIO_Pin_0|GPIO_Pin_1;
if ((GPIOB-›IDR& GPIO_Pin_1)!=0){cnt++;flag=0xff;}else{cnt--;flag=0xff;}
|
|
|
|
11.10.2011, 19:39
|
#909
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
st_1, ничего не накосячил. Пины являются входами с верхней подтяжкой. Поэтому и пишу в них 1. А настроены они в stm32_init.
|
|
|
|
11.10.2011, 19:52
|
#910
|
Прописка
Регистрация: 10.09.2010
Сообщений: 113
Сказал спасибо: 31
Сказали Спасибо 27 раз(а) в 27 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
а не пробовали в прерывании
led_flash(BLUE_LED);
закоментаривать, мож оно как-то мешает
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:22.
|
|