Засыпкин С.В.
Лаборатория электроники и
программирования
Электронный журнал с приложениями
№ 15
© Засыпкин С.В., 2011-2014
Содержание
1. Программирование на языке С на примере микроконтроллера ATmega168. Передача данных по UART.
UART предназначен для связи с разными внешними устройствами:
- компьютеры (через мосты UART-USB или преобразователи уровней для COM порта)
- другие микроконтроллеры с интерфейсом UART
- модемы GSM, Wi-Fi®, Bluetooth® и т.п. для передачи данных, обновления прошивки и т.п.
Передача данных на ПК позволит визуализировать различные данные, получаемые в программе микроконтроллера. На компьютере понадобится терминальная программа, например [5] для отображения этих данных. Параметры терминальной программы нужно настроить так же как и для микроконтроллера:
- скорость передачи данных (в примере будем ставить 57600 бит/с)
- данные 8 бит
- без паритета
- один стоп-бит
- без управления потоком данных (handshaking)
2. Программирование на языке С на примере микроконтроллера STM8S003K3T6. Работа с
таймерами.
На этом занятии рассмотрим работу с таймерами. Основная функция таймера – это счет импульсов. Импульсы могут поступать от тактового генератора (в данном случае таймер собственно и называется таймером) или от внешнего источника (в этом случае таймер называют счетчиком). Таймеры с возможностью тактирования внешним сигналом часто называют таймерами-счетчиками. Таймеры могут осуществлять счет как в прямом направлении (увеличивая свое значение на 1 при каждом тактовом импульсе), так и в обратном направлении (уменьшая свое значение на 1). Основным регистром таймера является регистр, в котором содержится значение таймера (регистр счета). Кроме него могут присутствовать и другие регистры, с помощью которых можно реализовывать дополнительные функции – прерывания, предварительное деление входной частоты тактового сигнала таймера (предделитель), ШИМ, сравнение, захват и т.п.
3. Программирование на языке С на примере микроконтроллера STM32F407VGT6. Работа с CAN.
Передача данных.
Рассмотрим работу с интерфейсом CAN. Данный интерфейс нашел широкое применение в автомобильной электронике и промышленном оборудовании благодаря заложенным в него свойствам высокой надежности.
Для работы с модулем необходимо подключить микросхему физического уровня CAN для передачи/приема сигналов. Схема подключения следующая:
Пример программы сделан с использованием библиотеки «CAN Library» [4] для компилятора «MikroC PRO for ARM» [4].
4. Программирование на языке С на примере микроконтроллера STM32F407VGT6. Работа с CAN. Прием данных.
Рассмотрим пример программы приема данных по шине CAN. Пример программы сделан с использованием библиотеки «CAN Library» [4] для компилятора «MikroC PRO for ARM» [4]. Настройки скорости как и в предыдущей статье. Дополнительно добавлено:
- переменные для настройки флагов приема и фильтров и их установка перед приемом в режиме инициализации
- переменные для принятых данных
- в функцию вывода содержимого регистров добавлены регистры, связанные с настройкой фильтров
- в основном цикле программы добавлен анализ приема сообщения и вывод его по UART
…
Пример вывода результат приема сообщения:
CAN_RX: Сообщение принято
CAN_RX_ID = 34
CAN_Data[0] = 9
5. Программирование на языке С на примере микроконтроллера STM32F407VGT6. Работа с таймером.
На этом занятии рассмотрим работу с таймерами. Основная функция таймера – это счет импульсов. Импульсы могут поступать от тактового генератора (в данном случае таймер собственно и называется таймером, служащим для измерения временных интервалов) или от внешнего источника (в этом случае таймер называют счетчиком). Таймеры с возможностью тактирования внешним сигналом часто называют таймерами-счетчиками. Таймеры могут осуществлять счет как в прямом направлении (увеличивая свое значение на 1 при каждом тактовом импульсе), так и в обратном направлении (уменьшая свое значение на 1). Основным регистром таймера является регистр, в котором содержится значение таймера (регистр счета).
Пример программы дан для IDE «CooCox®» [4]
6. Программирование на языке С на примере микроконтроллера STM32F407VGT6. Работа с
таймером. Прерывания. «Управление состоянием» объекта.
На этом занятии рассмотрим работу с прерываниями. Прерывания играют важную роль при работе программы. Они позволяют приостановить на время работу одной части программы и выполнить другую часть программы. Прерывания могут формироваться разными периферийными устройствами микроконтроллера, например таймерами. Причем для каждого таймера может генерироваться несколько разных прерываний. Каждое прерывание можно включить или выключить отдельно с помощью специальных битов в регистрах, которые называются «флагами разрешения прерывания». Кроме того, есть возможность включить прерывания глобально, т.е. будут работать все индивидуально разрешенные прерывания. Если прерывание включено, то при его возникновении устанавливается специальный бит в регистре, называемый «флагом прерывания». Для каждого прерывания есть свои биты разрешения прерывания и флага прерывания. Для каждого прерывания или группы прерываний существует специальные несколько ячеек в памяти, в которые записывается адрес подпрограммы обработки прерываний. Совокупность таких ячеек называется «таблицей векторов прерываний».
Примеры программ даны для IDE «CooCox®» [4].
7. Программирование на языке С на примере микроконтроллера STM32F407VGT6. Работа с
таймером. ШИМ.
На этом занятии рассмотрим работу ШИМ (широтно-импульсного модулятора) на основе таймера «TIM4». Для того, чтобы получить ШИМ сигнал, в таймере есть дополнительные регистры для реализации «функции сравнения». Всего таких регистров 4 и следовательно можно сделать до 4-х каналов ШИМ на одном таймере. В «регистре сравнения» находится число, задающее длительность импульса ШИМ, а число, до которого считает таймер, определяет период ШИМ. Есть несколько режимов ШИМ. Рассмотрим наиболее часто используемый. В этом режиме работы, когда значение таймера равно 0, формируется фронт импульса ШИМ, когда значение таймера достигает значения длительности импульса (в регистре сравнения), формируется спад импульса ШИМ, когда значение таймера достигает конечного числа счета, значение таймера сбрасывается в 0 и начинается новый цикл формирования сигнала ШИМ.
Рассмотрим пример плавного изменения яркости светодиода LED4. Всего необходимо выполнить 3 функции – инициализировать ШИМ с необходимой частотой (периодом), задать длительность импульса и включить ШИМ в работу.
Примеры программ даны для IDE «CooCox®» [4].
8. Программирование на языке С на примере микроконтроллера STM32F407VGT6. Работа с UART.
Передача данных.
Микроконтроллер имеет несколько интерфейсов UART. Обмен данными будем производить с персональным компьютером. Для демонстрации работы примера подключите к плате следующую схему, которая является преобразователем интерфейсов USB и UART.
На компьютере будет создан виртуальный COM порт.
Приведены примеры функций вывода байта, строки символов, вывод в терминальную программу в определенные позиции.
Примеры программ даны для IDE «CooCox®» [4].
9. Программирование на языке С на примере микроконтроллера STM32F407VGT6. Работа с RTC.
Выполнение периодических действий с помощью будильника.
Рассмотрим пример, когда необходимо производить некоторые действия через определенный интервал времени, например 5 сек. Будем использовать для этого будильник. Практически нам необходимо при возникновении прерывания будильника перепрограммировать его на новое время. В прерывании установим флаг необходимости перепрограммирования будильника, а в основном цикле программы – перепрограммируем его и сбросим флаг.
Результат работы программы:
RTC ALARM INT:
ALARM_A
13-00-05
ALARM_A
13-00-10
ALARM_A
13-00-15
Примеры программ даны для IDE «CooCox®» [4].
10. Программирование на языке С на примере микроконтроллера STM32F407VGT6. Работа с АЦП.
Программный запуск.
Микроконтроллер имеет 3
интерфейса АЦП (разрядность их 12 бит) и максимальную частоту преобразования
одного канала 2,4 МГц [1]. АЦП производит измерение напряжения от 0 до величины
опорного напряжения.
Будем использовать канал 12
преобразователя ADC1,
расположенный на выводе PC2.
Для изменения аналогового сигнала на входе АЦП будем использовать потенциометр,
который нужно подключить к плате следующим образом (VCC – 3,3В):
Для тех, кто использует плату «145», приведена таблица
подключений и фото платы:
Контакт разъема |
Узел платы «145» |
Вывод платы «STM32F4DISCOVERY» |
|
ЖКИ индикатор |
|
X1_EXT.5 |
D4 |
PE7/TIM1_ETR |
X1_EXT.6 |
D5 |
PD2/TIM1_ETR |
X1_EXT.7 |
D6 |
PE14 |
X1_EXT.8 |
D7 |
PE15 |
X2_EXT.1 |
E |
PA1 |
X2_EXT.3 |
RW |
PC1 |
X3_EXT.1 |
RS |
PB11 |
X3_EXT.2 |
LIGHT |
PE5 |
|
АЦП |
|
X2_EXT.3 |
R19 (установить J5, X18
в 2-3, на X13/1 подать 3V3) |
PC1 |
X2_EXT.4 |
R20 (установить J6, X19
в 2-3, на X13/2 подать 3V3, X4
снять (сигнал KEY_SCAN)) |
PC2 |