Когда стоит задача дизайна PHY для Ethernet, мы обращаемся к Reference manual производителя. В нем достаточно подробно рассказывается о том, что можно делать, а чего делать нельзя. Но идеальные условия могут не устраивать нас по ряду причин, в таком случае мы не знаем, что делать можно, чем позволено пренебречь и в каких пределах. Эта статья позволит оценить поведение LAN8742A в рамках бюджетных проектов, где используется двухсторонняя печатная плата, что безусловно уже является серьезным допущением.

Как сохранить работоспособность устройства, при этом не заваливая EMI тест устройства. Как оценить по косвенным признакам, работает физика нормально или нет. Далее в этой статье.

Начну с того, что пин Reset вам не поможет нормально перезапустить модуль SIM800L. Или, так скажем, этот пин - не панацея. Используйте PWRKEY - кнопка включения/выключения.

В интернете вы сможете найти много схем подключения дешевого модуля SIM800L от SIMCOM к микроконтроллеру. В каких-то схемах используют пин PWRKEY, а в каких-то нет. Я рекомендую использовать. Работает он довольно просто: чтобы выключить SIM модуль, замкните PWRKEY на GND на 1,5 секунды. А потом через 5-10 секунд, снова PWRKEY на GND на 1,5 секунды чтобы обратно включить. Это самый адекватный сброс, который я только мог повстречать.

В данном уроке вы освоите основы работы с таймером TIM4 и пройдете небольшую практику. Суть практической работы заключается в том, чтобы как и в самом начале поморгать светодиодом. Резонно назвать этот практикум "Hello, LED-2". В отличие от первого примитивного примера, где задержка (пауза) осуществлялась зависанием микроконтроллера на количество заданных итераций, здесь микроконтроллер зависать не будет. Он будет "слушать" события. Таймер будет создавать эти события в строго определенный промежуток времени. И по возникновении событий можно будет менять состояние линии порта, на которой висит светодиод. По-прежнему я использую отладочную плату "синяя пуля оптовых оценка STM8 доска" и данный пример будет работать вообще на любом STM8 линеек Value и Acces line.

В предыдущем занятии мы создали обработчик прерывания IRQ22, для этого понадобилось создать взаимосвязь между таблицей векторов прерываний и кодом основной программы. Таким связующим звеном послужил файл main.h, в котором был определен прототип функции ADC_int_handler - которая и является обработчиком прерывания. Алгоритм работы функции был помещен в main.c, а ссылку на функцию я вписал в таблицу векторов из файла stm8_interrupt_vector.c.

Чтобы более глубоко понять, что из себя представляет таблица векторов прерываний, необходимо углубиться в самый нижний уровень программирования, да ассемблера, или даже до самого машинного кода.

Таблица векторов прерываний находится в памяти программ (flash) в диапазоне адресов 0x008000 - 0x00807F. Каждый вектор занимает 4 байта. Всего векторов 32 и под них отведено 128 байт.

Прерывания (interrupts) приостанавливают выполнение текущей программной инструкции и вызывают совсем другую подпрограмму - обработчик прерывания. После того как обработчик выполнит свои инструкции, то вернет управление обратно в то место, откуда была прервана основная программа. Это может быть полезно, например, если приложение должно синхронизироваться по времени (при срабатывании прерывания таймера в строго заданный интервал времени), если нужно мгновенно отреагировать на внешнее событие (нажали на кнопку), оперативно прочесть значение ADC сразу по завершении преобразования и так далее.

Прерывания от каждого источника прерываний будут вызывать разные обработчики прерываний. В STM8 есть так называемые векторы прерываний, их 32, но фактически могут быть задействованы только 23 из них, так как 9 зарезервированы. Таким образом можно создать до 23 обработчиков прерываний. Примером вектора прерываний может послужить вектор IRQ22 "ADC1", он вызывает подпрограмму-обработчик прерывания, возникшего от источника "ADC1" при окончании преобразования (выставление флага EOC - end of conversion и вызов прерывания) или при возникновении события AWD (Analog watchdog, флаг AWD будет выставлен и вызвано то же самое прерывание, что и при выставлении флага EOC). Таким образом, по флагам можно понять, почему "сработал" этот вектор.