Bochenkov_MM.ppt
- Количество слайдов: 19
ФГБОУ ВПО «Московский Государственный Университет Тонких Химических Технологий» Кафедра автоматики, электротехники и электроники им. А. В. Нетушила «Программирование микроконтроллеров архитектуры ARM Cortex‑M 4 на базе отладочного модуля STM 32 F 4 Discovery» ● Студент: Боченков М. М. ● Группа ХТ-205 ● Руководители: Иванов Р. Н. и Моцинов П. В ● Москва 2014 г.
Цель и задачи работы Цель моей работы получить навыки в сборке и изучить возможности 32‑разрядных микроконтроллеров, а также организация взаимодействия нескольких устройств между собой, использования передачи и отображения информации в компьютерных системах, обучению самостоятельной разработки программного обеспечения с использованием специализированных программ, проведении тестирования и отладки на реальных устройствах. Понять принципы работы STM 32 F 4, её основной периферии, организации передачи данных с их использованием, управление другими устройствами для измерения внешних показателей, настройка отображения информации, полученной от внешних устройств. И приобрести практические навыки в работе с Lab. VIEW. 2
Микроконтроллер(МК) Микроконтроллер — микросхема, предназначенная для управления электронными устройствами. Типичный микроконтроллер сочетает на одном кристалле функции процессора и периферийных устройств, содержит ОЗУ или ПЗУ. По сути, это компьютер, способный выполнять простые задачи 3
STM 32 F 4 Discovery Плата STM 32 F 4 Discovery предназначена для ознакомления с возможностями 32‑битного МК на основе ARM‑архитектуры, а также для реализации собственных устройств и приложений с использованием аппаратного обеспечения платы. Плата STM 32 F 4 Discovery оснащена: микроконтроллером STM 32 F 407 VGT 6 с ядром Cortex‑M 4 F, 1 Мб Flash‑памяти, 192 кб RAM в корпусе LQFP 100; отладчиком ST‑Link/V 2 для отладки и программирования МК; питанием платы через USB или от внешнего источника питания 5 В; датчиком движения ST MEMS LIS 302 DL и выходами цифрового акселерометра по трем осям; датчиком звука ST MEMS MP 45 DT 02; звуковым ЦАП CS 43 L 22; восемью светодиодами: LD 1 (красный/зеленый) для USB‑подключения, LD 2 (красный) для питания 3. 3 В, четыре пользовательские светодиода: LD 3 (оранжевый), LD 4 (зеленый), LD 5 (красный), LD 6 (синий) и два светодиода для USB On‑The‑Go – LD 7 (зеленый) и LD 8 (красный) двумя кнопками (для программирования пользователем и для перезапуска) . 4
Coo. Cox Ide – это среда разработки, другими словами, система программных средств для разработки программного обеспечения. Обычно, среда разработки включает в себя компилятор. Компилятор транслирует программу с языка «C» в эквивалентную программу близкую машинному коду. 5
Листинг программы 6
#define HSE_VALUE 8000000 #include "stm 32 f 4 xx. h" #include "usbd_cdc_vcp. h" // подключаем USB CDC #include "stm 32 f 4 xx_gpio. h" #include "stm 32 f 4 xx_rcc. h" #include "stm 32 f 4 xx_spi. h" #include "lis 302 dl. h" __ALIGN_BEGIN USB_OTG_CORE_HANDLE USB_OTG_dev __ALIGN_END; uint 8_t out. X; uint 8_t out. Y; uint 8_t out. Z; void delay() { volatile uint 32_t i; for(i=0; i<=13000; i++); } void spi_init() { GPIO_Init. Type. Def GPIO_Init. Structure; SPI_Init. Type. Def SPI_Init. Structure; 7
// Тактирование модуля SPI 1 и порта А RCC_APB 2 Periph. Clock. Cmd(RCC_APB 2 Periph_SPI 1, ENABLE); RCC_AHB 1 Periph. Clock. Cmd(RCC_AHB 1 Periph_GPIOA | RCC_AHB 1 Periph_GPIOE, ENABLE); // Настраиваем ноги SPI 1 для работы в режиме альтернативной функции GPIO_Pin. AFConfig(GPIOA, GPIO_Pin. Source 7, GPIO_AF_SPI 1); GPIO_Pin. AFConfig(GPIOA, GPIO_Pin. Source 5, GPIO_AF_SPI 1); GPIO_Pin. AFConfig(GPIOA, GPIO_Pin. Source 6, GPIO_AF_SPI 1); GPIO_Init. Structure. GPIO_Mode = GPIO_Mode_AF; GPIO_Init. Structure. GPIO_Speed = GPIO_Speed_50 MHz; GPIO_Init. Structure. GPIO_OType = GPIO_OType_PP; GPIO_Init. Structure. GPIO_Pu. Pd = GPIO_Pu. Pd_NOPULL; GPIO_Init. Structure. GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_6 | GPIO_Pin_5; GPIO_Init(GPIOA, &GPIO_Init. Structure); GPIO_Init. Structure. GPIO_Mode = GPIO_Mode_OUT; GPIO_Init. Structure. GPIO_Speed = GPIO_Speed_50 MHz; GPIO_Init. Structure. GPIO_OType = GPIO_OType_PP; GPIO_Init. Structure. GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOE, &GPIO_Init. Structure); GPIO_Set. Bits(GPIOE, GPIO_Pin_3); 8
//Заполняем структуру с параметрами SPI модуля SPI_Init. Structure. SPI_Direction = SPI_Direction_2 Lines_Full. Duplex; //полный дуплекс SPI_Init. Structure. SPI_Data. Size = SPI_Data. Size_8 b; // передаем по 8 бит SPI_Init. Structure. SPI_CPOL = SPI_CPOL_Low; // Полярность и SPI_Init. Structure. SPI_CPHA = SPI_CPHA_1 Edge; // фаза тактового сигнала SPI_Init. Structure. SPI_NSS = SPI_NSS_Soft; // Управлять состоянием сигнала NSS программно SPI_Init. Structure. SPI_Baud. Rate. Prescaler = SPI_Baud. Rate. Prescaler_32; // Предделитель SCK SPI_Init. Structure. SPI_First. Bit = SPI_First. Bit_MSB; // Первым отправляется старший бит SPI_Init. Structure. SPI_Mode = SPI_Mode_Master; // Режим - мастер SPI_Init(SPI 1, &SPI_Init. Structure); //Настраиваем SPI 1 SPI_Cmd(SPI 1, ENABLE); // Включаем модуль SPI 1. . // Поскольку сигнал NSS контролируется программно, установим его в единицу // Если сбросить его в ноль, то наш SPI модуль подумает, что // у нас мультимастерная топология и его лишили полномочий мастера. SPI_NSSInternal. Software. Config(SPI 1, SPI_NSSInternal. Soft_Set); } uint 8_t write. Data(uint 8_t data) { while(SPI_I 2 S_Get. Flag. Status(SPI 1, SPI_I 2 S_FLAG_BSY) == SET) ; SPI_I 2 S_Send. Data(SPI 1, data); 9
while(SPI_I 2 S_Get. Flag. Status(SPI 1, SPI_I 2 S_FLAG_BSY) == SET) ; return SPI_I 2 S_Receive. Data(SPI 1); } void set. Reg(uint 8_t address, uint 8_t value) { GPIO_Reset. Bits(GPIOE, GPIO_Pin_3); write. Data(address); write. Data(value); GPIO_Set. Bits(GPIOE, GPIO_Pin_3); } uint 8_t get. Reg(uint 8_t address) { uint 8_t data=0; address|=(1<<7); GPIO_Reset. Bits(GPIOE, GPIO_Pin_3); write. Data(address); data = write. Data(0 x 00); GPIO_Set. Bits(GPIOE, GPIO_Pin_3); return data; } int main(void) { spi_init(); //Инициализация SPI System. Init(); // настройки тактирования // включаем usb USBD_Init(&USB_OTG_dev, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_CDC_cb, &USR_cb) ; 10
// Включить акселерометр. Это минимальная инициализация. set. Reg(LIS 302 DL_CTRL_REG 1, (1<<PD_CTRL_REG 1) ); while (1) { if(usb_cdc_kbhit()) { // проверка: приняты данные? char c; c = usb_cdc_getc(); // получение байта с usb switch(c) { // разбор принятого байта case 'x': out. X = get. Reg(LIS 302 DL_OUT_X); usb_cdc_printf(&out. X); break; case 'y': out. Y = get. Reg(LIS 302 DL_OUT_Y); usb_cdc_printf(&out. Y); break; case 'z': out. Z = get. Reg(LIS 302 DL_OUT_Z); usb_cdc_printf(&out. Z); break; } } 11
Lab. VIEW — это среда разработки и платформа для выполнения программ, созданных на графическом языке программирования «G» ● 12
Интерфейс самой программы на Lab. VIEW 13
G-Code 14
15
16
Цель и задачи, поставленные в работе, выполнены. В частности: Получение практических навыков по сборке МК систем Получение практических навыков в программировании на «C» и «G» Получение практических навыков работы с платой STM 32 F 4 Discovery Получение практических навыков работы с Lab. View 17
Цели и задачи, достигнутые при выполнении данной работы, удалось получить под руководством Иванова Р. Н. и Моцинова П. В. 18
Спасибо за внимание! Студент группы ХТ-205 Боченков М. М. 19
Bochenkov_MM.ppt