Избавляюсь от HAL:
05.04.2017, 15:36
|
|
|
Временная регистрация
Регистрация: 06.05.2007
Сообщений: 75
Сказал спасибо: 18
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Избавляюсь от HAL:
Странно:
Закрыл окна system view и открыл заново и уже другая картина! см. вложение.
Но вопрос остался - нужен пример инициализации USART на CMSIS.
|
|
|
|
05.04.2017, 19:49
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: Избавляюсь от HAL:
Да, но в каком режиме желаете запустить этот ваш USART?
Вот например вот так, для USART1 в режиме полнодуплексного UART, 9600, без наворотов (прерывания, DMA и проч.):
|
PHP код:
|
RCC-›AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
RCC-›APB2ENR |= RCC_APB2ENR_USART1EN;
GPIOA-›MODER |= GPIO_MODER_MODER9_1 | // PA9: AF PP
GPIO_MODER_MODER10_1; // PA10: AF PP
GPIOA-›AFR[1] |= (7 ‹‹ ((9-8)*4)) | // PA9: AF7
(7 ‹‹ ((10-8)*4)); // PA10: AF7
USART1-›CR1 |= USART_CR1_UE | // USART enable
USART_CR1_TE | // TX enable
USART_CR1_RE; // RX enable
USART1-›BRR = 16000000 / 9600; // ~9600 @ 16 MHz
|
.
Сообщение от MikhailSh
|
|
А в файле stm32f407xx.h нет #defain для GPIOA-›AFR
|
так не в виде дефайна (def ine) записывается в CMSIS, а в виде определения типа структуры, вот так:
|
Код:
|
/**
* @brief General Purpose I/O
*/
typedef struct
{
__IO uint32_t MODER; /*!‹ GPIO port mode register, Address offset: 0x00 */
__IO uint32_t OTYPER; /*!‹ GPIO port output type register, Address offset: 0x04 */
__IO uint32_t OSPEEDR; /*!‹ GPIO port output speed register, Address offset: 0x08 */
__IO uint32_t PUPDR; /*!‹ GPIO port pull-up/pull-down register, Address offset: 0x0C */
__IO uint32_t IDR; /*!‹ GPIO port input data register, Address offset: 0x10 */
__IO uint32_t ODR; /*!‹ GPIO port output data register, Address offset: 0x14 */
__IO uint16_t BSRRL; /*!‹ GPIO port bit set/reset low register, Address offset: 0x18 */
__IO uint16_t BSRRH; /*!‹ GPIO port bit set/reset high register, Address offset: 0x1A */
__IO uint32_t LCKR; /*!‹ GPIO port configuration lock register, Address offset: 0x1C */
__IO uint32_t AFR[2]; /*!‹ GPIO alternate function registers, Address offset: 0x20-0x24 */
} GPIO_TypeDef; |
Последний раз редактировалось NewWriter; 05.04.2017 в 20:04.
|
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
05.04.2017, 23:29
|
|
|
Временная регистрация
Регистрация: 06.05.2007
Сообщений: 75
Сказал спасибо: 18
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Избавляюсь от HAL:
Код который я приводил тоже работает. Только надо добавить:
USART1-›CR1 |= USART_CR1_UE
в Init или другую ф-ю.
Интересует вопрос: почему в CMSIS нет определений для альтернативных функций, что бы не писать цифры:
GPIOA-›AFR[1] |= ( 7 ‹‹ ((9- *4)) | // PA9: AF7
( 7 ‹‹ ((10- *4)); // PA10: AF7
|
|
|
|
06.04.2017, 12:19
|
|
|
Вид на жительство
Регистрация: 09.12.2009
Адрес: Россия, Тула
Сообщений: 376
Сказал спасибо: 191
Сказали Спасибо 153 раз(а) в 98 сообщении(ях)
|
Re: Избавляюсь от HAL:
Сообщение от MikhailSh
|
|
Интересует вопрос: почему в CMSIS нет определений для альтернативных функций
|
Как нет?
Вот:
|
Код:
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_2); |
Это для таймера 2 ШИМ-выход на PA1
А это для USART1:
|
Код:
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1); |
Последний раз редактировалось krug_vv; 06.04.2017 в 12:23.
|
|
|
|
06.04.2017, 14:04
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: Избавляюсь от HAL:
Сообщение от krug_vv
|
А это для USART1:
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
|
Вроде ж SPL.
Имхо удобная настройка кучки портов типа без халов и эспээлей:
|
Код:
|
uint8_t i = 0;
/* GPIO pin configuration */
while(GPIOInitTable[i] != 0){
gpio_conf(GPIOInitTable[i], PINInitTable[i], MODE_AF, TYPE_PUSHPULL, SPEED_100MHz, PULLUP_NONE, AFInitTable[i]);
i++;
} |
отсюда:
http://en.radzio.dxp.pl/stm32f429idi...ontroller.html
|
|
|
|
06.04.2017, 15:32
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: Избавляюсь от HAL:
oleg110592, gpio_conf нет в cmsis!
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
06.04.2017, 16:37
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: Избавляюсь от HAL:
Сообщение от eddy
|
|
gpio_conf
|
есть там по ссылке в исходниках:
|
Код:
|
//================================================== ===============================================
// gpio_conf
//================================================== ===============================================
void gpio_conf(GPIO_TypeDef * GPIO, uint8_t pin, uint8_t mode, uint8_t type, uint8_t speed, uint8_t pullup, uint8_t af)
{
GPIO-›MODER = (GPIO-›MODER & MASK2BIT(pin)) | (mode ‹‹ (pin * 2));
GPIO-›OTYPER = (GPIO-›OTYPER & MASK1BIT(pin)) | (type ‹‹ pin);
GPIO-›OSPEEDR = (GPIO-›OSPEEDR & MASK2BIT(pin)) | (speed ‹‹ (pin * 2));
GPIO-›PUPDR = (GPIO-›PUPDR & MASK2BIT(pin)) | (pullup ‹‹ (pin * 2));
if(pin › 7)
{
GPIO-›AFR[1] = (GPIO-›AFR[1] & AFMASKH(pin)) | (af ‹‹ ((pin - 8) * 4));
}
else
{
GPIO-›AFR[0] = (GPIO-›AFR[0] & AFMASKL(pin)) | (af ‹‹ ((pin) * 4));
}
} |
http://en.radzio.dxp.pl/stm32f429idiscovery/sdram.html
|
Цитата:
|
Download
STM32F429/439 SDRAM configuration
|
|
|
|
|
06.04.2017, 17:40
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: Избавляюсь от HAL:
Сообщение от oleg110592
|
|
Имхо удобная настройка кучки портов типа без халов и эспээлей
|
Удобная для вас, но неудобная для МК - тот же самый SPL, только вдобавок еще и таблица.
А что касается конфига выводов под SDRAM или дисплей по RGBHV, то тут вообще лучше один раз написать что-то типа
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
чем то же самое писать сначала в таблице, а потом эту таблицу еще и прокручивать.
|
|
|
|
06.04.2017, 18:20
|
|
|
Гражданин KAZUS.RUN
Регистрация: 05.04.2009
Сообщений: 973
Сказал спасибо: 35
Сказали Спасибо 154 раз(а) в 133 сообщении(ях)
|
Re: Избавляюсь от HAL:
Сообщение от NewWriter
|
|
Удобная для вас
|
и... автора-поляка - нас уже двое. Функция с параметрами, которые в таблице, разве называется SPL? Может быть. Тут удобство - когда надо много ножек настроить причем на разных портах.
0xA8AAAAAA - вроде называют магическим числом, в предложенных таблицах, же название порта и просто номер ножки, но я не претендую - может ваш способ лучше.
|
|
|
|
06.04.2017, 18:59
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: Избавляюсь от HAL:
Я как делаю - беру обычный виндовый калькулятор и в режиме "программист" тыкаю мышкой номера битов, вверху получается число в шестнадцатеричном виде, его и копирую.
Всё равно ведь такие вещи, как SDRAM, настраиваются один раз в самом начале кода, и сигналы жестко привязаны к пинам.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:26.
|
|