Сразу признаюсь, что очень давно не писал на Си для МК и уже много забыл. Ткните носом, кому не лень.
Вот есть у СТМ8 файл iostm8l001j3.h, который подключил вначале программы. Однако, в нем есть описания всех регистров и их битов. Но запись в виде: PB_DDR_bit.DDR6 = 1; меня не устраивает.
Можно ли как-то правильно это поменять, чтобы писать что-то вроде: GPIOB->CRH &= ~(GPIO_CRH_MODE12 | GPIO_CRH_CNF12); ?
Хочу, чтобы все было одинаково с СТМ32...
Добавлено after 1 minute 11 seconds: Честно... опять забыл все про структуры... ( Вот они тжело мне даются.
Если освежите в памяти, что такое "указатель на структуру", то конечно же поймете, что можно. Потому что запись GPIOB->CRH представляет собой обращение к элементу структуры GPIO_TypeDef через указатель на структуру, об этом говорит значок -> в отличие от символа точки . В свою очередь, GPIOB - это текстовая короткая запись указателя на структуру ((GPIO_TypeDef *) GPIOB_BASE), в которой GPIOB_BASE - есть ничто иное как числовой адрес группы регистров GPIOB, записанный через текстовые определения.
Спасибо большое. ) Как раз про это и читаю. Снова и снова. Именно про указатели.
Добавлено after 10 minutes 53 seconds: По разному у них эти хидеры организованы... Похоже на мой первый взгляд для СТМ8 написание можно превратить в нечто похожее для АВР8. Не переписывать же весь файл библиотеки.
Не спорю, тема непростая, сам далеко не с первого раза понял. Я с STM8 не работал, сразу на STM32 пересел, а плата Дискавери с STM8 так и осталась лежать нетронутой. Поэтому не знаю, как в STM8 там сделано. Но наверняка у порта есть аналогичный набор регистров. Нужно составить структуру этих регистров по порядку, с учетом их размерности, в том же виде, как сделано у STM32 со структурой GPIO_TypeDef, то есть создать новый тип данных в виде структуры посредством typedef struct. Затем нужно узнать из карты адресного пространства адрес первого регистра в этой группе и объявить указатель на этот адрес, причем тип указателя (его размерность) будет как раз типом структуры: #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE), где GPIOB_BASE - записанный числом адрес первого регистра этой группы. После этого начнет работать запись в привычном для STM32 виде.
Да, а переписывать нужно мноооооого, весь заголовочник, в принципе то. Времени потратится немало.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Можно, конечно, макросов наопределять, да и сделать структуры, как у STM32, но ведь под STM8 нет gcc, а есть лишь убогий sdcc, который вообще оптимизировать не умеет. Вот и приходится как-то так писать.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Но это физически невозможно, т.к., к сожалению, а) для STM8 нет gcc, б) восьмибитка значительно ограничена в ресурсах, в) там и регистры совершенно иначе организованы. P.S. Советую там у меня на гитхабе по ссылочке попастись, я там много чего успел на STM8 сделать, пока не плюнул и не решил полностью на STM32 перейти. P.P.S. Кстати, а почему именно STM8? Ведь от него есть выгода лишь если делать огромную кучу изделий (да еще и на каком-нибудь S003, а то и S002), а для единичных поделок что STM32 за 70-200р, что STM8 за 45 и выше. Зато по способностям - просто море же разницы!
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
ну вот мне на них проще. Они сами проще, и писать проще. Лицензию Cosmic пока выдаёт, его особенности известны... написав что-то для ST7/STM8 я могу дать гарантию и затрачу меньше времени, чем с ARM, так как чтобы дать гарантию с ARM мне надо изучить его, пролистывание же книжки по ядру М3 этим изучением не является... Конечно, если речь о типовых задачах. Если же из 8 выжимать что-то на пределе в попытке конкурировать с 32 - то конечно, нафиг, проще бездумно сгенерировать проект в кодогенераторе да натыкать требуемого. ... а ещё у меня пока достаточно много ST7/STM8, это тоже причина, может, и у ТС тоже их сотня )
Так посмотрите на адрес массива. Я же сказал, что есть варианты. Есть компиляторы, где константам для попадания во флеш требуется специальный квалификатор.
А вообще, не такой, наверное, разверну его по вертикали, т.к. проще выводить будет на светодиоды.. Но не принципиально. Будет одномерный массив, но с большим числом данных.
Аааа... спасибо. сейчас подправлю.
Добавлено after 2 minutes 55 seconds: И еще, я не знаю как посмотреть адрес массива... Он же не компилирует
Я понял, что ему не нравится... Он не хочет, чтобы массив рвали. Т.е. каждый элемент после запятой перенесен на другую строку. Если все элементы в одну строку, то нормально....
Как так-то?!
И самый галвный вопрос, который сейчас интересен - как разместить массив данных во флеши у СТМ8?
Нет... Наврал... Не нравится ему запись в виде 0b00111,
Error[Pe253]: expected a "," C:\PR\IAR\First\main.c 11
Разберитесь поддерживает ли компилятор двочные литералы. Iar в этом плане строго стандарта придерживается, а двоичные литералы появились только в С++14. Появилась ли такая поддержка в С не помню, провеьте сами.
ЗЫ: Не путать с поддержкой двоичных констант компилятором GCC, она есть давно.
Я вот всего второй день с этим микроконтроллером и ИАРом в том числе для него. И уже столько гемора. А рефренс на микроконтроллер показался очень простым. Почти нет никаких настроек. )))) Тут же запустил на частоте в 16 МГц, тут же помигал линейкой светодиодов. Решил дальше покопать с таймерами и сделать мигалку типа POV, чтобы буквы в воздухе пислала. И уперся в массив..... этих букв.
Добавлено after 1 minute 53 seconds: В АВР можно было на Си писать так двоичные числа.
Да.. уже начитался об этом... Можно еще хэдер создать с дефайнами (256 штук). ))) Короче, Си не понимает такого представления двоичного числа. А в АВР это значит тоже где-то в хэдерах было, просто я не обращал внимание. Понятно теперь, что надо все в шестнадцатиричные приводить.
Добавлено after 1 minute 37 seconds: В том и прикол был, что эти буквы читаются именно как матрицы в двоичном коде. Там прям буквы видно глазами, которые будут выводится на матрицу по столбцам. Ладно. Смирюсь пока с этим.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения