Современная электроника №9/2020
ИНЖЕНЕРНЫЕ РЕШЕНИЯ 35 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 9 2020 Рис. 10. Установка внутреннего генератора 72 МГц для тактирования микроконтроллера: включение внутреннего генератора в работу (а), установка источника тактирования от внутреннего генератора (б) Рис. 11. Настройка интерфейса SPI в 3-проводном режиме master и выбор коэффициента делителя (90) для установки частоты импульсов SCK 395,604 кГц Рис. 12. Общий вид портов микроконтроллера в корпусе QFN24 Рис. 13. Настройка портов вывода сигналов CSML и CSST (а) и ввода сигналов CAL0, CAL1 и DIAP (б) Рис. 14. Замена модели памяти со Small (а) на Large (б) для получения доступа к функции sprintf(), работающей с числами с плавающей запятой Далее, открыв файл EFM8LB12F64E- A-QFN24.hwconf, увидим картин- ку с портами микроконтроллера EFM8LB12F64E-A-QFN24. С помощью команд Skip необходимо придать пор- там микроконтроллера вид, представ- ленный на рисунке 12. Порты P1.2 и P1.3 необходимо настроить как цифровые выходы (см. рис. 13а), а порты P0.3, P1.5 и P1.6 – как цифровые входы со слаботочными подтяжками (см. рис. 13б). Далее следует заменить исходный конфигурационный файл создан- ным файлом EFM8LB12F64E-A-QFN24. hwconf, который и будет использован при автоматическом создании файла инициализации устройства InitDevice.c. Для этого следует скопировать создан- ную конфигурацию EFM8LB12F64E- A-QFN24.hwconf, вставить её рядом с исходной EFM8LB1_ADC_Lib_Autoscan_ Large_Buffer.hwconf и удалить исход- ную. К счастью, среда Simplicity Studio допускает такие операции над «дере- вом» программы. После этого необходимо сменить модель памяти со Small на Large. Для это- го в проекте выбрать опцию Properties, в меню выбрать опцию Setting, как показано на рисунке 14а, затем выбрать модель Large (см. рис. 14б). После это- го нажать кнопки Apply и OK. Рассмотрим процедуру записи и чте- ния коэффициентов, полученных в результате калибровки нуля и полной шкалы (см. далее), во флеш-памяти. Для этого была использована готовая про- грамма, приведённая в Simplicity Studio в качестве примера и предназначен- ная для микроконтроллера EFM8LB1 (EFM8LB1_Flash). В этом примере используется основной файл EFM8LB1_ Flash.c и 4 дополнительных: EFM8LB1_ FlashPrimitives.h, EFM8LB1_FlashUtils.h, EFM8LB1_FlashPrimitives.c, EFM8LB1_ FlashUtils.c. В файле EFM8LB1_ FlashUtils.c имеется несколько под- программ, из которых было оставлено только две: запись в память (FLASH_ Write) и чтение (FLASH_Read). Под- программа EFM8LB1_FlashPrimitives.c а б а б использована полностью (в ней как раз приведена подпрограмма стирания страницы памяти объемом 512 байт – FLASH_PageErase). Подпрограммы FLASH_Write и FLASH_ Read предназначены для записи во флеш-память и чтения из неё массива однобайтовых чисел. Но коэффициен- ты, полученные в результате калибров- ки нуля и полнойшкалы, являются чис- лами с плавающей запятой. Поэтому записать напрямую в память эти коэф- фициенты, пользуясь подпрограммами FLASH_Write и FLASH_Read, невозможно, т.к. число с плавающей запятой занима- ет 4 байта. Однако если использовать совмещение (в нотации C++ «union» – объединение) массива размерностью а б
RkJQdWJsaXNoZXIy MTQ4NjUy