06.04.2017, 19:40
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Избавляюсь от HAL:
Сообщение от NewWriter
|
Всё равно ведь такие вещи, как SDRAM
|
а я тут, расчувствовавшись и к прочей периферии недавно в одном проектике на F401 это применил, даже к USARTу закошерил. Периферию мне реально удобно показалось настраивать, проектик работает хорошо:
Код:
|
static GPIO_TypeDef * const UsartGPIOInitTable[] = {
GPIOA,
0
};
static uint8_t const UsartTxPINInitTable[] = {
2,
0
};
static uint8_t const UsartRxPINInitTable[] = {
3,
0
};
..........................
uint8_t i = 0;
//TX
while(UsartGPIOInitTable[i] != 0)
{
gpio_conf(UsartGPIOInitTable[i], UsartTxPINInitTable[i], MODE_AF, TYPE_PUSHPULL, SPEED_50MHz, PULLUP_UP, 7);
i++;
}
i = 0;
//RX
while(UsartGPIOInitTable[i] != 0)
{
gpio_conf(UsartGPIOInitTable[i], UsartRxPINInitTable[i], MODE_AF, TYPE_PUSHPULL, SPEED_50MHz, PULLUP_NONE, 7);
i++;
}
.......................... |
з.ы. специально так сделал - USARTов может в военное время быть до 6 и более
|
|
|
|
06.04.2017, 20:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Избавляюсь от HAL:
oleg110592, это не cmsis, а говно какое-то, которое точно нельзя использовать. Разве что как define оформить, потому как static inline такого плана нафиг не сдалось!
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
06.04.2017, 20:56
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Избавляюсь от HAL:
Сообщение от eddy
|
которое точно нельзя использовать
|
ну тут каждый хозяин-барин, я вот вступил... для меня медом пахнет, если шо и поляк тоже, а он неплох, имхо, - реально в свое время его код помог разобраться с F429, SDRAM, ART Accelerator.
|
|
|
|
06.04.2017, 22:07
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Избавляюсь от HAL:
Действительно... кому как... Лично я пилял SDRAM и LTCD собственными силами, посему и не изобретал таблиц. И конфиг ТФТ-модуля выглядит вот так (на F746):
Нажмите, чтобы открыть спойлер
Код:
|
void LCD_TFT_Init(rgb888_t background_color)
{
/* Тактирование интерфейсов */
RCC-›AHB1ENR |= RCC_AHB1ENR_GPIOEEN | RCC_AHB1ENR_GPIOGEN | // PE, PG,
RCC_AHB1ENR_GPIOIEN | RCC_AHB1ENR_GPIOJEN | // PI, PJ,
RCC_AHB1ENR_GPIOKEN; // PK
RCC-›APB2ENR |= RCC_APB2ENR_LTDCEN; // LTDC
GPIOI-›MODER |= GPIO_MODER_MODER12_0; // PI12: PP (стендбай/норм. дисплея)
GPIOK-›OTYPER |= GPIO_OTYPER_OT_3; // для подсветки дисплея PK3 OD
GPIOK-›MODER |= GPIO_MODER_MODER3_0; // PK3 Out
/* Настройка портов под RGBHV интерфейс */
GPIOE-›MODER |= GPIO_MODER_MODER4_1; // PE4: AF PP
GPIOE-›AFR[0] |= 0x0E ‹‹ (4*(4)); // PE4: AF14
GPIOG-›MODER |= GPIO_MODER_MODER12_1; // PG12: AF PP
GPIOG-›AFR[1] |= 0x0E ‹‹ (4*(12-8)); // PG12: AF14
GPIOI-›MODER |= 0xA1280004 ; // PI9, PI10, PI14, PI15: AF PP
GPIOI-›AFR[1] |= 0xEE000EE0; // PI9, PI10, PI14, PI15: AF14
GPIOJ-›MODER = 0xA8AAAAAA ; // PJ0 - PJ15, кроме PJ12: AF PP
GPIOJ-›AFR[0] = 0xEEEEEEEE; // PJ0 - PJ7: AF14
GPIOJ-›AFR[1] = 0xEEE0EEEE; // PJ8 - PJ15, кроме PJ12: AF14
GPIOK-›MODER |= 0x0000AA2A; // PK0 - PK7, кроме PK3: AF PP
GPIOK-›AFR[0] |= 0xEEEE0EEE; // PK0 - PK7, кроме PK3: AF14
/* Настройка синхронизации дисплея */
LTDC-›SSCR = ((HSYNCW - 1) ‹‹ 16) | (VSYNCW - 1); // ширина горизонт и верт синхроимпульса
LTDC-›BPCR = ((HSYNCW + HBP - 1)‹‹16) | (VSYNCW + VBP - 1); // Back Porch + синхроимпульс, гориз и верт
LTDC-›AWCR = ((HACTW + HSYNCW + HBP - 1) ‹‹ 16 ) | // Back Porch + синхроимпульс + активная ширина и высота
(VACTW + VSYNCW + VBP - 1);
LTDC-›TWCR = ((HACTW + HSYNCW + HBP + HFP - 1) ‹‹ 16) | // суммарная синхронизация, гориз и верт:
(VACTW + VSYNCW + VBP + VFP - 1); // Back Porch + Front Porch + синхроимпульс + активная ширина и высота
LTDC-›BCCR = (background_color.r ‹‹ 16) | // цвет фона по умолчанию, в компонентах RGB888
(background_color.g ‹‹ 8) |
(background_color.b);
} |
а весь драйвер (*.c) занимает чуть больше 250 строк текста, вместе со всеми комментами и межстрочными пробелами, и выглядит весьма компактно и читаемо.
|
|
|
|
07.04.2017, 07:31
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Избавляюсь от HAL:
Сообщение от NewWriter
|
SDRAM и LTCD собственными силами
|
нус сравним.
Опустим настройку портов, хотя, имхо, именно там строк польского текста меньше (уточним - практически три строки) и соответственно "выглядит весьма компактно и читаемо" (поляку наверное так было удобнее).
Идем дальше - начало настройки LTCD:
пан поляк:
Код:
|
............................................
/* Synchronization Size Configuration */
LTDC-›SSCR = ((HSYNC - 1) ‹‹ 16) | (VSYNC - 1);
/* Back Porch Configuration */
LTDC-›BPCR = ((HBP - 1) ‹‹ 16) | (VBP - 1);
............................................ |
господин NewWriter:
Код:
|
............................................
/* Настройка синхронизации дисплея */
LTDC-›SSCR = ((HSYNCW - 1) ‹‹ 16) | (VSYNCW - 1); // ширина горизонт и верт синхроимпульса
LTDC-›BPCR = ((HSYNCW + HBP - 1)‹‹16) | (VSYNCW + VBP - 1); // Back Porch + синхроимпульс, гориз и верт
............................................ |
по моему два практически одинаковых велосипеда, "пиляли" каждый собственными силами, придраться не к чему, кроме, конечно настройки портов, но быть изобретательным человеком - это хорошо, имхо.
з.ы. ушли от темы, длинномер пора заносить - предлагаю закончить осуждать поляка и вернутся к нашим коровам 0xDEADBEEF
|
|
|
|
07.04.2017, 09:50
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Избавляюсь от HAL:
Так вот как раз если вернуться к тем самым коровам, то вот именно с точки зрения МК, табличка является не лучшим вариантом работы. Что неудобно программисту, то удобно МК, и наоборот. Мало того, что перебор и чтение всех элементов таблицы занимает гораздо больше времени, и реализация получается по типу SPL или HAL, так еще и сама таблица занимает место. И хотя при объемах флеша в мегабайт лишняя сотня байт погоды не сделает, а 180 МГц скорости проглотят любую таблицу, но все равно, дело эстетики. И как я понял, по такому методу режимы работы всех выводов в таблице будет одинаковые.
Выводы таких модулей, как SDRAM вообще жестко фиксированы и другой альтернативы нет. Один раз написал и забыл. Ладно бы там еще LTDC, у него небольшие вариации по выводам, да и то помелочи - "либо сюда, либо туда".
В принципе, вопрос предпочтений - дело лично каждого. Лично я - против, мне не нравится. Кому нравится - пользуйтесь.
PS.
Сообщение от oleg110592
|
строк польского текста меньше (уточним - практически три строки)
|
и если уж так придираться в мелочах, то вовсе не три строки. Это как в рекламе - "скидки до 70%", а если разобраться, то лишь на одну, никому и даром не нужную позицию товара ценой рублей 100.
так вот, если разобраться, то...
при записи напрямую, без выкрутасов, получается 11 строк чистого текста, ну плюс 5 строк для настройки скорости, если надо.
А у того поляка - как в рекламе - видим три строки цикла с вызовом функции, но "в уме" имеем еще энное количество строк под таблицу и еще столько же строк под тело функции, плюс заморочки с тем, чтобы эту функцию не забыть прописать везде, откуда она вызывается.
И выходит как раз как в рекламе - "скидка 70%" тянет за собой прицепом "а еще заплатите за доставку", и лишь получив заказанное, думаешь - а нафига оно было надо...
Ладно бы, я там понимаю, если у тебя там штук 5 разбросанных параллельных интерфейсов висит..
Последний раз редактировалось NewWriter; 07.04.2017 в 10:37.
|
|
|
|
07.04.2017, 10:56
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Избавляюсь от HAL:
Сообщение от NewWriter
|
если вернуться к тем самым коровам
|
SDRAM - всеж не та корова, вопрос был в конструкции типа
PHP код:
|
GPIOA-›AFR[1] |= (7 ‹‹ ((9-8)*4)) | // PA9: AF7
(7 ‹‹ ((10-8)*4)); // PA10: AF7
|
она хоть и есть в документации RM для F0 и в сниппетсах, но поначалу вводит в ступор (меня например). Разобравшись что это логика обычная - все равно вызывает кратковременное зависание мозга, могу делать ошибки. ТС тоже заакцентировал на этом внимание.
Кликать мышкой биты в калькуляторе тоже вводит меня в ступор, обязательно буду делать ошибки, видать такой склад недалекого умишки.
потому конструкция типа:
PHP код:
|
gpio_conf(GPIOInitTable[i], PINInitTable[i], MODE_AF, TYPE_PUSHPULL, SPEED_100MHz, PULLUP_NONE, AFInitTable[i]);
|
где всего то надо заполнить табличку AFInitTable[i] обычными естественными значениями альтернативной функции вызвала мое одобрение и восхищение, о чем радостно поспешил сообщить на форуме. А тут просто получил ярлык - это г-но причем без пояснений почему же это оно. Памяти в моем проектике с USB хостом и Fatfs заняло около 24кБ (SPL из библиотеки повычищал), осталось памяти как гуталина, быстродействия тож хватает - точно не секунды порты настраиваются, глазом моргнуть не успеваю . Почему бы не пуркуа па?
|
|
|
|
03.05.2017, 11:21
|
|
Временная регистрация
Регистрация: 06.05.2007
Сообщений: 75
Сказал спасибо: 18
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Избавляюсь от HAL:
Почему может не устанавливаться флаг RXNE у USART1 в STM32F407 при приеме байта?
В отладчике видно, что данные поступили правильно, но флаг RXNE не появляется. Если разрешить прерывание, то заход в обработчик прерывания от USART1 происходит. Но т. к. нет флага то и чтения регистра с данными в программе не происходит.
Инициализация USART1:
Код:
|
void STM32_UART_USART1_Init(void)
{
//Настройка тактирования
RCC-›AHB1ENR |= RCC_AHB1ENR_GPIOAEN; //Тактирование GPIO
RCC-›APB2ENR |= RCC_APB2ENR_USART1EN; //Тактирование модуля USART1
//Настройка портов
GPIOA-›AFR[1] |= 0x00000070 | 0x00000700; //Альтернативная функция
GPIOA-›MODER |= GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1; //Режим работы
GPIOA-›OSPEEDR |= GPIO_OSPEEDER_OSPEEDR9 | GPIO_OSPEEDER_OSPEEDR10; //Скорость порта
//GPIOA-›OTYPER |= //Тип порта когда он является выходом
GPIOA-›PUPDR |= GPIO_PUPDR_PUPDR9_0 | GPIO_PUPDR_PUPDR10_0; //Подтяжка порта
USART1-›CR1 |= USART_CR1_RE | USART_CR1_TE | USART_CR1_RXNEIE; //Разрешить прием, передачу и прерывание по приему
USART1-›BRR = 0x000002D9; //Скорость передачи: 115200
NVIC_SetPriority(USART1_IRQn, 0); //Установка приоритета
NVIC_EnableIRQ(USART1_IRQn); //Разрешение прерывания
} |
Что делать незнаю! Какие могут быть варианты?
Попробую попозже на USART2 перейти.
|
|
|
|
03.05.2017, 11:55
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: Избавляюсь от HAL:
Сообщение от MikhailSh
|
Что делать незнаю! Какие могут быть варианты?
|
бит UE не разглядел
USART1-›CR1 |= USART_CR1_UE;
|
|
|
|
03.05.2017, 12:29
|
|
Временная регистрация
Регистрация: 06.05.2007
Сообщений: 75
Сказал спасибо: 18
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Избавляюсь от HAL:
Бит UE в отладчике в ручную пока ставлю, на картинке он установлен.
Так же на картинке видно, что в DR поступил байт, а RXNE нет.
Последний раз редактировалось MikhailSh; 03.05.2017 в 13:19.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:16.
|
|