16.12.2011, 21:30
|
#1121
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
AJScorp, спасибо, компилируется. Но в железе еще не проверял.
|
Проверял на эмуляторе, работает.
ИМХО, это изврат, никогда не приходилось передавать параметр таким образом, простых указателей достаточно.
|
|
|
|
19.12.2011, 15:14
|
#1122
|
Временная регистрация
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Подскажите, пожалуйста, в программе в цикле работает modbus и запись на flash.
ТОлько когда работает подпрограмма запсии данных во флэш-память - не срабатывают прерывания по USART. Что может быть причиной?
|
|
|
|
19.12.2011, 15:37
|
#1123
|
Заблокирован
Регистрация: 26.12.2009
Сообщений: 3,124
Сказал спасибо: 116
Сказали Спасибо 867 раз(а) в 614 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Всё логично... Когда идёт запись во флэш ничего не должно мешать процессу записи...
Там и с DMA похожая ситуёвина...
|
|
|
|
19.12.2011, 17:20
|
#1124
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от AJScorp
|
Ну, тогда
описание
unsigned char DS1822_Search_Rom_One_Device (GPIO_TypeDef * GPIOx, unsigned long PINx, unsigned char Serial_Num[DS1822_SERIAL_NUM_SIZE]);
вызов
err=DS1822_Search_Rom_One_Device(One_Wire_Pin, (unsigned char*)&DS18B20_sn[1]);
|
Уходит в hard fault и не возвращается
|
|
|
|
19.12.2011, 17:49
|
#1125
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
Уходит в hard fault и не возвращается
|
Надо под отладчиком смотреть, где идет обращение к неверному адресу. Других вариантов пока нету.
|
|
|
|
20.12.2011, 12:21
|
#1126
|
Прописка
Регистрация: 10.08.2010
Сообщений: 113
Сказал спасибо: 30
Сказали Спасибо 43 раз(а) в 26 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
решил для себя написать несколько макросов для работы с портами.
Код:
|
// варианты настройки пинов порта
//
#define IN_ANALOG 0x0
#define IN_Z 0x4
#define IN_R 0x8
#define IN_ 0xC
#define OUT_2MHz 0x2
#define OUT_2MHz_OPEN 0x6
#define OUT_2MHz_ALT 0xA
#define OUT_2MHz_ALT_OPEN 0xE
#define OUT_10MHz 0x1
#define OUT_10MHz_OPEN 0x5
#define OUT_10MHz_ALT 0x9
#define OUT_10MHz_ALT_OPEN 0xD
#define OUT_50MHz 0x3
#define OUT_50MHz_OPEN 0x7
#define OUT_50MHz_ALT 0xB
#define OUT_50MHz_ALT_OPEN 0xF
// здесь для пинов конкретного порта выставляю то что хочу от них получить
#define CFG_PORT_A_0 IN_Z
#define CFG_PORT_A_1 IN_Z
#define CFG_PORT_A_2 IN_Z
#define CFG_PORT_A_3 IN_Z
#define CFG_PORT_A_4 OUT_50MHz_ALT
#define CFG_PORT_A_5 OUT_50MHz_ALT
#define CFG_PORT_A_6 OUT_50MHz_ALT
#define CFG_PORT_A_7 OUT_50MHz_ALT
// и т.д. для каждого пина каждого порта
// здесь получаю значение регистра конфигурации порта - например CRL
#define CFG1_PORT(X) (uint32_t) ((CFG_PORT_##X##_0) * 0x1 + \
(CFG_PORT_##X##_1 * 0x10) + \
(CFG_PORT_##X##_2 * 0x100) + \
(CFG_PORT_##X##_3 * 0x1000) + \
(CFG_PORT_##X##_4 * 0x10000) + \
(CFG_PORT_##X##_5 * 0x100000) + \
(CFG_PORT_##X##_6 * 0x1000000) + \
(CFG_PORT_##X##_7 * 0x10000000))
// дальше в программе пишу следующее
GPIOA-›CRL= CFG1_PORT(A); |
после компиляции получаю
Код:
|
\ 0000000C ........ LDR.W R0,??DataTable17_21 ;; 0x40010800
\ 00000010 ........ LDR.W R1,??DataTable17_22 ;; 0xbbbb4444
\ 00000014 0160 STR R1,[R0, #+0] |
Вроде все хорошо, все работает, но компилятор (IAR) почему-то выдает предупреждение
Код:
|
Warning[Pe061]: integer operation result is out of range |
Кто-нибудь может сказать где здесь выход за диапазон? Регистр устанавливается как мне надо,
проверял в отладчике. Несколько раздражает постоянная ошибка......
|
|
|
|
20.12.2011, 14:57
|
#1127
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Кто работает с графическими дисплеями, подскажите. Как организовать работу с дисплеем? Мне видится такой способ - в памяти контроллера лежит готовое изображение, которое по прерыванию каждые 30-50мс выводится на дисплей. Процедуры работают с этой страницей. Но при разрешении 320х240 по байта на цвет выходит 153кБ памяти. Как-то не влезает в мой STM32F103. Можно использовать память дисплея, но обмен данными с ней не такой быстрый. Например, мне надо нарисовать сдвигающуюся в сторону синусоиду. Рисую кривую, жду, такой же кривой закрашиваю, рисую рядом новую? Правильно понимаю? Тогда достаточно хранить в памяти координаты точек и цвета того, что будет выведено на экран.
Как оптимизировать работу с дисплеем?
|
|
|
|
20.12.2011, 15:47
|
#1128
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Цитата:
|
в памяти контроллера лежит готовое изображение, которое по прерыванию каждые 30-50мс выводится на дисплей. Процедуры работают с этой страницей.
|
Так работает стандартный видеоконтроллер
Цитата:
|
Но при разрешении 320х240 по байта на цвет выходит 153кБ памяти. Как-то не влезает в мой STM32F103.
|
и тут вы уперлись в ограничение микроконтроллерной системы ![Улыбка](images/smilies/icon_smile.gif) Все логично.
Цитата:
|
Можно использовать память дисплея, но обмен данными с ней не такой быстрый. Например, мне надо нарисовать сдвигающуюся в сторону синусоиду. Рисую кривую, жду, такой же кривой закрашиваю, рисую рядом новую? Правильно понимаю?
|
Память дисплея и нужно использовать, если у Вас такой дисплей. Алгоритм именно такой. Возможно будет смысл выполнить оптимизацию для вывода только изменившейся части картинки. Тут многое зависит от примененного контроллера экрана. Если "в тупую" давать команды вывода точек- можем получить большие накладные расходы (на одну точку - 3 записи в регистры), поэтому некоторые контроллеры дисплеев позволяют задать область экрана и выводить в неё потоком. Конечно реалтайм видео сделать сложно, но анимация - вполне получается.
__________________
misterdi<@>i.ua
|
|
|
Сказали "Спасибо" MisterDi
|
|
|
20.12.2011, 17:26
|
#1129
|
Частый гость
Регистрация: 20.09.2009
Сообщений: 40
Сказал спасибо: 17
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
Кто работает с графическими дисплеями, подскажите. Как организовать работу с дисплеем?
|
Через память дисплея либо внешнюю память.
Сообщение от Easyrider83
|
Как оптимизировать работу с дисплеем?
|
Учитывать особенности контроллера диспа, вот моя простая библиотечка для работы с НХ8352(400х240 16бит цвет) - Free Simple HX8352 Graphics Library, достаточно оптимизирована именно под НХ8352, использует всего сотню другую оперативки. Под библиотеку и не только написал небольшую утилиту конвертации изображений в код - Bitmap2Code, может пригодится
Скоро планирую небольшое обновление
__________________
Последний раз редактировалось Left Radio; 20.12.2011 в 17:32.
|
|
|
Сказали "Спасибо" Left Radio
|
|
|
20.12.2011, 17:56
|
#1130
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Внешнюю память не вариант - у меня демоплата. Никогда не думал, что 32к оперативы мне окажется мало. В общем-то, библиотека для работы с дисплеем есть. Там для заливки экрана используется страничная запись. Заливка происходит быстро. Для вывода изображения тоже самое. Просто был поражен примером на операционке uCOSII2.91
Реально динамичное изображение в реальном времени. И как они это реализовали?
Может быть копать в сторону ДМА и переферии работы с контроллером?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:03.
|
|