реклама на сайте
подробности

 
 
> как лучше дописать макрос Аскольда для STM32?, застрял на cpl();
Метценгерштейн
сообщение Jan 1 2013, 10:28
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



В общем, пока вот что получилось

Код
#elif defined(STM32L152xx)
    #define _setL(port,bit)         do { port -> BSRRH |= bit; } while(0) // возможно, | лишний символ
    #define _setH(port,bit)         do { port -> BSRRL |= bit; } while(0)
    #define _clrL(port,bit)         do { port -> BSRRL |= bit; } while(0)
    #define _clrH(port,bit)         do { port -> BSRRH |= bit; } while(0)
    #define _cpl(port,bit,val)      do {


вот с cpl не знаю. У нас по очереди нужно записывать бит в регистр
port -> BSRRH |= bit
потом в
port -> BSRRL |= bit

никакого XOR, как с АВР.
по идее, нужно делать проверку if ()
бита в порте GPIOx_IDR

но что-то не хочет компилиться.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Метценгерштейн
сообщение Jan 1 2013, 11:51
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



в макросе Аскольда cpl делается
Код
do {port ^= (1 << bit); } while(0)

т.е. посредством XOR

Наверное, не поняли задачу- при включении в коде записи cpl(LED);
каждый раз, когда код проходит эту строчку, LED то включается, то выключается.

Цитата(toweroff @ Jan 1 2013, 14:46) *
обернуть в {} вместе с ; (хотя зачем? почему просто REG->DEF |= value не спасает?)
и bit в (1UL<<bit) тоже не помешает
и регистры. кто там сбрасывает, кто там выставляет разобраться надо

запись бита в регистр BSRRL устанавливает бит. Запись этого же бита в регистр BSRRH сбрасывает его.
Вот и весь разбор )
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 04:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016