Проще простого
Нет ничего проще запуска периферии на контроллере STM32. Инженеры компании STMicroelectronics создали все условия для лёгкого внедрения своих контроллеров в электронные изделия. Для этого совершенно не требуется длительного и мучительного изучения регистров периферии, а также команд ассемблера.
Попробуем описать процесс запуска любой периферии на примере RTC (встроенные часы реального времени).
1. Берём отладочную плату STM3210E-SK/IAR. На самом деле, пойдёт любая другая, на которой установлен часовой кварц. Более того, можно собрать свой макет и подключить часовой кварц по схеме:
![]() |
(это фрагмент принципиальной схемы отладочной платы STM3210E-SK/IAR…. Некоторые кварцевые резонаторы не имеют третьего выхода, подключаемого на землю …. Соответственно для них это не требуется)
2. Запускаем IAR EMW (или другую среду разработки, которая нравится)
3. Создаём новый проект. Как это сделать - рассказано тут.
4. Подключаем к проекту библиотеки:
![]() |
Здесь файл startup - описывает прерывания и запускает функцию SystemInit (переводит на внешний кварц и выставляет частоту 72МГц) до выполнения основной программы. Функция SystemInit находится в файле system_stm3210x.c, поэтому он тоже подключен (если не сделать так - линкер заругается). Остальные файлы - библиотеки периферии (стандартные, которые выкачиваются с сайта ST).
5. Не думая как запускать RTC, заходим в описание библиотек.
![]() |
6. Открываем примеры кода применения библиотечных функций.
![]() |
7. Находим интересующий пример (из великого множества примеров).
![]() |
8. В нём открываем функцию main
![]() |
00068 int main(void) 00069 { 00070 /*!< At this stage the microcontroller clock setting is already configured, 00071 this is done through SystemInit() function which is called from startup 00072 file (startup_stm32f10x_xx.s) before to branch to application main. 00073 To reconfigure the default setting of SystemInit() function, refer to 00074 system_stm32f10x.c file 00075 */ 00076 00077 /* Initialize LED1 mounted on STM3210X-EVAL board */ 00078 STM_EVAL_LEDInit(LED1); 00079 00080 /* USARTx configured as follow: 00081 - BaudRate = 115200 baud 00082 - Word Length = 8 Bits 00083 - One Stop Bit 00084 - No parity 00085 - Hardware flow control disabled (RTS and CTS signals) 00086 - Receive and transmit enabled 00087 */ 00088 USART_InitStructure.USART_BaudRate = 115200; 00089 USART_InitStructure.USART_WordLength = USART_WordLength_8b; 00090 USART_InitStructure.USART_StopBits = USART_StopBits_1; 00091 USART_InitStructure.USART_Parity = USART_Parity_No; 00092 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; 00093 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; 00094 00095 STM_EVAL_COMInit(COM1, &USART_InitStructure); 00096 00097 00098 /* NVIC configuration */ 00099 NVIC_Configuration(); 00100 00101 if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5) 00102 { 00103 /* Backup data register value is not correct or not yet programmed (when 00104 the first time the program is executed) */ 00105 00106 printf("rnn RTC not yet configured...."); 00107 00108 /* RTC Configuration */ 00109 RTC_Configuration(); 00110 00111 printf("rn RTC configured....");
10. Копируем функцию RTC_Configuration() из примера в свой проект и делаем её вызов из функции main().
11. Запускаем проект и смотрим регистры RTC
![]() |
12. Во время отладки узнаём, что регистр RTC_CNTL - это и есть регистр, в котором ведётся счёт секунд (нижние 16 бит). Меняется 1 раз в секунду на 1 (растёт, RTC работает от внешнего кварца - задача выполнена!). Впрочем, это не важно. Чтобы узнать "сколько секунд" можно использовать функцию RTC_GetCounter, взятую в описании стандартной библиотеки, после чего забыть о существовании регистров периферии (любой) навсегда (при желании).
![]() |
Инженеры компании "Промэлектроника" рекомендуют начинать освоение контроллеров STM именно таким методом.
Данный метод подходит для освоения семейств (требуется правильно выбрать библиотеку применяемого семейства):
- STM8S
- STM8A
- STM8L
- STM32F0
- STM32F1
- STM32F2
- STM32F4
- STM32L
- И других контроллеров фирмы STMicroelectronics, которые появятся на рынке в ближайшем будущем.
Данный метод оптимизирован под быстрое проектирование без изучения внутренностей контроллера. После написания программы мы получили небольшую информацию о регистрах периферии…. И то только для понимания, что периферия заработала… Если бы часы можно было наблюдать визуально (мигание светодиода), то наблюдение за регистрами RTC стало бы ненужным.
Проект выложен на форуме "Промэлектроники".
Следующий шаг, который можно выполнить для оптимизации объёмов памяти и увеличения быстродействия - управление регистрами периферии напрямую. Это само придёт по прошествии небольшого времени программирования на начальном уровне.
Компания " Промэлектроника" желает вам быстрых проектов, которые принесут вам быструю прибыль.
За более подробной информацией обращайтесь:
Бренд-менеджер Сухоруков Игорь
- E-mail: info@promelec.ru
- Тел: +7 (343) 245-68-20
Задать вопрос техподдержке вы можете на нашем форуме
Автор документа: Промэлектроника
, http://www.promelec.ru" |
Дата публикации: 04.06.2012 Дата редактирования: 21.03.2013 |
Кол-во просмотров 7287 | |
![]() |