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

Проще простого

Нет ничего проще запуска периферии на контроллере 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 стало бы ненужным.

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

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

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

За более подробной информацией обращайтесь:

Бренд-менеджер Сухоруков Игорь

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


Автор документа: Промэлектроника , http://www.promelec.ru"
Дата публикации: 04.06.2012
Дата редактирования: 21.03.2013
Кол-во просмотров 7413
 
 Все новости одной лентой