Запуск периферии на STM32

Группа компаний Промэлектроника
31.05.2012
Нет ничего проще запуска периферии на контроллере 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....");

9. Копируем функцию RTC_Configuration() из примера в свой проект и делаем её вызов из функции main().

10. Запускаем проект и смотрим регистры RTC



11. Во время отладки узнаём, что регистр RTC_CNTL - это и есть регистр, в котором ведётся счёт секунд (нижние 16 бит). Меняется 1 раз в секунду на 1 (растёт, RTC работает от внешнего кварца - задача выполнена!). Впрочем, это не важно. Чтобы узнать "сколько секунд" можно использовать функцию RTC_GetCounter, взятую в описании стандартной библиотеки, после чего забыть о существовании регистров периферии (любой) навсегда (при желании).



Инженеры компании "Промэлектроника" рекомендуют начинать освоение контроллеров STM именно таким методом.
Данный метод подходит для освоения семейств (требуется правильно выбрать библиотеку применяемого семейства):
- STM8S
- STM8A
- STM8L
- STM32F0
- STM32F1
- STM32F2
- STM32F4
- STM32L
- И других контроллеров фирмы STMicroelectronics, которые появятся на рынке в ближайшем будущем.

Данный метод оптимизирован под быстрое проектирование без изучения внутренностей контроллера. После написания программы мы получили небольшую информацию о регистрах периферии…. И то только для понимания, что периферия заработала… Если бы часы можно было наблюдать визуально (мигание светодиода), то наблюдение за регистрами RTC стало бы ненужным.

Проект выложен на форуме "Промэлектроники".

Следующий шаг, который можно выполнить для оптимизации объёмов памяти и увеличения быстродействия - управление регистрами периферии напрямую. Это само придёт по прошествии небольшого времени программирования на начальном уровне.

Компания " Промэлектроника" желает вам быстрых проектов, которые принесут вам быструю прибыль.

За получением более подробной информации вы можете обратиться:

Бренд-менеджер:
Сорокин Сергей
E-mail: stm@promelec.ru
Телефон: +7 (343) 245-68-20

Задать вопрос техподдержке Вы можете на нашем форуме.


  "ПРОМЭЛЕКТРОНИКА" - официальный прямой дистрибьютор компании "STMicroelectronics"


Последние новости - одной лентой: