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

 
 
> как лучше дописать макрос Аскольда для 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, 19:39
Сообщение #2


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

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



другими словами, записав только один бит, я другие не затру?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 1 2013, 20:03
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Не затрёте.
На всякий случай вот вам пара ссылок: Вот вариант макросов Волкова. А вот - вариант для плюсов (этот поновее).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Jan 11 2013, 02:14
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(AHTOXA @ Jan 2 2013, 00:03) *

Вот это:
Код
#define        _setmodeHi(mode,port,pin)    \
                GPIO##port->CRH = (GPIO##port->CRH & (~(0x0F << ((pin-8)<<2)))) | (mode << ((pin-8)<<2))

#define        _setmodeLo(mode,port,pin)    \
                GPIO##port->CRL = (GPIO##port->CRL & (~(0x0F << (pin<<2)))) | (mode << (pin<<2))
будет работать не так, как хотелось бы. Скобки стоят "криво". wink.gif

UPD.
Хотя нет, вроде правильно стоят. Показалось, что сначала исполняется |, а потому уже &.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 11 2013, 05:46
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Уф, сейчас глянул - и тоже показалось, что неправильно. Я аж испугалсяsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:23
Рейтинг@Mail.ru


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