Создание первой программы Keil uVision 5

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 15 марта 2018, 19:09

Код: Выделить всё

#include "STM32F10x.h"
 
int main 
(void)
{
     uint32_t i;
     GPIO_InitTypeDef GPIO_Init_Led;
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
     GPIO_Init_Led.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_5;
     GPIO_Init_Led.GPIO_Mode = GPIO_Mode_Out_PP;
     GPIO_Init_Led.GPIO_Speed = GPIO_Speed_2MHz;
     GPIO_Init(GPIOD, &GPIO_Init_Led);
 
     while
(1)
        {
             GPIO_SetBits(GPIOD, GPIO_Pin_All);
             for(i=0;i<2000000;i++){}
              GPIO_ResetBits(GPIOD, GPIO_Pin_All);
               for(i=0;i<2000000;i++){}
        }


Первым делом объявляем переменную с помощью которой мы будем инициализировать структуру нашей функции.

GPIO_InitTypeDef GPIO_Init_Led;

GPIO_InitTypeDef - указываем тип переменной на видео показано где и куда смотреть.

Далее идет GPIO_Init_Led это наша переменная и имя у нее произвольное, но лучше чтобы они несли смысловую нагрузку

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);

Вот этой строкой мы включаем тактирование шины APB2 и всей периферии которая находится на данной шине если внимательно присмотреться то можно увидеть что данная шина разветвляется и есть такие модели МК которые поддерживают тактирование не всей шины а конкретного узла который находится на ней, тем самым уменьшая энерго потребление МК (вот к примеру сотовые телефоны почти все работают на ядре ARM)

GPIO_Init_Led.GPIO_Pin = GPIO_Pin_1| GPIO_Pin_3| GPIO_Pin_5;

Данная строка указывает номер вывода порта D , чтобы компилятор понял к какому выводу применить настройки идущие строчками ниже.

GPIO_Init_Led.GPIO_Mode = GPIO_Mode_Out_PP;

В данной строке указывается режим в котором должен работать наш вывод. нам нужно чтобы наш вывод работал на выход.

GPIO_Init_Led_Speed = GPIO_Speed_2MHz;

Эта строка устанавливает частоту на которой будут работать наши выводы, это частота тактирования от внутреннего генератора.

GPIO_Init(GPIOD, &GPIO_Init_Led);

Данной строкой мы инициализируем наш порт D, другими словам применяем выше описанные настройки к нашему порту.

Компилируем - загружаем в плату - перезагружаем плату (иначе не будет результата) - любуемся результатом.

phpBB [media]
[center]i love you [s]mxIni[/s] Mysql[/center]


Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#2 Дим » 15 марта 2018, 20:06

Данный код не совсем подходит для моей платы - на ней нет этих светодиодов, так что воспользуемся кодом из CooCox CoIDE - IDE для STM32. Им мы будем моргать встроенным светодиодом на 13 пине.

Код: Выделить всё

#include "stm32f10x.h"
//#include "stm32f10x_gpio.h"
//#include "stm32f10x_rcc.h"
 
 
int main
(void)
{
  int i;
  /* Initialize Leds mounted on STM32 board */
  GPIO_InitTypeDef  GPIO_InitStructure;
  /* Initialize LED which connected to PC13, Enable the Clock*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  /* Configure the GPIO_LED pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
 
  while 
(1)
  {
    /* Toggle LED which connected to PC13*/
    GPIOC->ODR ^= GPIO_Pin_13;
 
    
/* delay */
    for(i=0;i<0x100000;i++);
  }
}


Компилируем - загружаем в плату - перезагружаем плату (иначе не будет результата) - любуемся результатом.
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «STM 32, ATtiny»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 4 гостя