<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://progcortex.mybb.ru/export.php?type=rss" rel="self" type="application/rss+xml" />
		<title>Программирование микроконтроллеров</title>
		<link>https://progcortex.mybb.ru/</link>
		<description>Программирование микроконтроллеров</description>
		<language>ru-ru</language>
		<lastBuildDate>Sat, 10 Feb 2018 21:32:35 +0300</lastBuildDate>
		<generator>MyBB/mybb.ru</generator>
		<item>
			<title>RCC - Reset and clock control</title>
			<link>https://progcortex.mybb.ru/viewtopic.php?pid=11#p11</link>
			<description>&lt;p&gt;Пример настройки системы тактирования на максимальные частоты - stm32f103c8, кварц&amp;#160; 8МГц.&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 22.5em&quot;&gt;&lt;pre&gt;
void Sys_ClockInit(void)
{// HSE = 8000000; SYSCLK = 72000000; APB1 = 36000000; APB2 = 72000000
  FLASH-&amp;gt;ACR = 0x30 | FLASH_ACR_LATENCY_2;  //

  RCC-&amp;gt;CR |= RCC_CR_HSEON;                                                     //включаем генератор HSE
  while(!(RCC-&amp;gt;CR &amp;amp; RCC_CR_HSERDY));                                           //ожидание готовности HSE
  RCC-&amp;gt;CFGR = RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL9 | RCC_CFGR_PPRE1_2;          //источник тактовых сигналов дл¤ PLL выбираем HSE
  RCC-&amp;gt;CR |= RCC_CR_PLLON;                                                     //включаем PLL
  while(!(RCC-&amp;gt;CR &amp;amp; RCC_CR_PLLRDY));                                           //ожидание готовности PLL
  RCC-&amp;gt;CFGR |= RCC_CFGR_SW_PLL;                                                //выбираем PLL для тактирования
}
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (MasterElectric)</author>
			<pubDate>Sat, 10 Feb 2018 21:32:35 +0300</pubDate>
			<guid>https://progcortex.mybb.ru/viewtopic.php?pid=11#p11</guid>
		</item>
		<item>
			<title>Урок 2. stm32407 Бегущие огни. STM32F4DISCOVERY.</title>
			<link>https://progcortex.mybb.ru/viewtopic.php?pid=10#p10</link>
			<description>&lt;p&gt;ВАРИАНТ №4.&lt;/p&gt;
						&lt;p&gt;В третьем варианте процесс переключения светодиодов выполняеться как фоновая задача отвлекая основную программу только в момент переключения. Теперь в четвертом и последнем варианте процесс будет полностью реализован без участия ЦП микроконтроллера. Тут мы задействуем модуль DMA.&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;
/*
******************************************************************************
File:     main.c
Info:     Generated by Atollic TrueSTUDIO(R) 9.0.0   2018-01-31

The MIT License (MIT)
Copyright (c) 2018 STMicroelectronics

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the &amp;quot;Software&amp;quot;), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED &amp;quot;AS IS&amp;quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

******************************************************************************
*/

/* Includes */
#include &amp;quot;main.h&amp;quot;

/* Private macro */
#define _DMA_SxCR_CHSEL(xVal) ((uint32_t) (xVal &amp;lt;&amp;lt; 25))

/* Private variables */
// массив значения которго мы будем записывать в порт
uint32_t LEDs_BuffCtrl[4] = {
  (GPIO_BSRR_BR_12 | GPIO_BSRR_BR_13 | GPIO_BSRR_BR_14 | GPIO_BSRR_BR_15 | GPIO_BSRR_BS_12),
  (GPIO_BSRR_BR_12 | GPIO_BSRR_BR_13 | GPIO_BSRR_BR_14 | GPIO_BSRR_BR_15 | GPIO_BSRR_BS_13),
  (GPIO_BSRR_BR_12 | GPIO_BSRR_BR_13 | GPIO_BSRR_BR_14 | GPIO_BSRR_BR_15 | GPIO_BSRR_BS_14),
  (GPIO_BSRR_BR_12 | GPIO_BSRR_BR_13 | GPIO_BSRR_BR_14 | GPIO_BSRR_BR_15 | GPIO_BSRR_BS_15)
};

/* Private function prototypes */
/* Private functions */
void RCC_Init(void);
void GPIO_Init(void);
void TIM8_Init(void);
void DMA2_Stream1_Chnl7_Init(void);

void RCC_Init(void)
{
  RCC-&amp;gt;AHB1ENR = RCC_AHB1ENR_GPIODEN | RCC_AHB1ENR_DMA2EN;  // включаем тактирование GPIOD и DMA1
  RCC-&amp;gt;APB2ENR = RCC_APB2ENR_TIM8EN;
}

void GPIO_Init(void)
{
  GPIOD-&amp;gt;MODER = GPIO_MODER_MODER0_0 | GPIO_MODER_MODER12_0 | GPIO_MODER_MODER13_0 | GPIO_MODER_MODER14_0 | GPIO_MODER_MODER15_0;  // настраиваем PD12, PD13, PD14, PD15 как &amp;quot;двухтактный выход общего назначения&amp;quot;
}

void TIM8_Init(void)
{
  TIM8-&amp;gt;PSC = 127;  // настраиваем предделитель
  TIM8-&amp;gt;ARR = 49999;  // настраиваем максимальное значение счета
  TIM8-&amp;gt;CCR1 = 500;
  TIM8-&amp;gt;DIER = TIM_DIER_UDE;  // разрешаем генерировать запрос на прерывание по переполнению счетчика
  TIM8-&amp;gt;EGR = TIM_EGR_UG;  // генерируем Update, для обновления теневых регистров
  TIM8-&amp;gt;SR = 0;  // сбрасываем флаги
  TIM8-&amp;gt;CR1 = TIM_CR1_CEN | TIM_CR1_URS;  // включаем таймер в работу
}

void DMA2_Stream1_Chnl7_Init(void)
{
  DMA2_Stream1-&amp;gt;CR = 0;
  DMA2_Stream1-&amp;gt;M0AR = (uint32_t) &amp;amp;LEDs_BuffCtrl[0];
  DMA2_Stream1-&amp;gt;PAR = (uint32_t) &amp;amp;GPIOD-&amp;gt;BSRR;
  DMA2_Stream1-&amp;gt;NDTR = sizeof(LEDs_BuffCtrl)/sizeof(*LEDs_BuffCtrl);
  DMA2_Stream1-&amp;gt;CR = DMA_SxCR_PL | _DMA_SxCR_CHSEL(7) | DMA_SxCR_MSIZE_1 | DMA_SxCR_PSIZE_1 | DMA_SxCR_MINC | DMA_SxCR_DIR_0 | DMA_SxCR_CIRC;
  DMA2-&amp;gt;LIFCR = DMA_LIFCR_CDMEIF1 | DMA_LIFCR_CFEIF1 | DMA_LIFCR_CHTIF1 | DMA_LIFCR_CTCIF1 | DMA_LIFCR_CTEIF1;
  DMA2_Stream1-&amp;gt;CR |= DMA_SxCR_EN;
}


int main(void)
{
  RCC_Init();
  GPIO_Init();

  DMA2_Stream1_Chnl7_Init();
  TIM8_Init();

  while(1);
}
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (MasterElectric)</author>
			<pubDate>Fri, 02 Feb 2018 01:16:35 +0300</pubDate>
			<guid>https://progcortex.mybb.ru/viewtopic.php?pid=10#p10</guid>
		</item>
		<item>
			<title>Урок 1. stm32407 зажигаем светодиод. STM32F4DISCOVERY.</title>
			<link>https://progcortex.mybb.ru/viewtopic.php?pid=6#p6</link>
			<description>&lt;p&gt;Плата STM32F4DISCOVERY, зажигаем светодиод на ноге PD12.&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;
/* Includes */
#include &amp;quot;stm32f4xx.h&amp;quot;

/* Private macro */
/* Private variables */
/* Private function prototypes */
/* Private functions */
void RCC_Init(void);
void GPIO_Init(void);



void RCC_Init(void)
{
  RCC-&amp;gt;AHB1ENR = RCC_AHB1ENR_GPIODEN;  // включаем тактирование GPIOD
}

void GPIO_Init(void)
{
  GPIOD-&amp;gt;MODER = GPIO_MODER_MODER12_0;  // настраиваем PD12 как &amp;quot;двухтактный выход общего назначения&amp;quot;
}


int main(void)
{
  RCC_Init();
  GPIO_Init();

  GPIOD-&amp;gt;BSRRL = GPIO_BSRR_BS_12;  // выставляем на PD12 лог.1 (зажигаем светодиод)

  while(1);
}
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (MasterElectric)</author>
			<pubDate>Wed, 31 Jan 2018 21:16:22 +0300</pubDate>
			<guid>https://progcortex.mybb.ru/viewtopic.php?pid=6#p6</guid>
		</item>
		<item>
			<title>Вступление.</title>
			<link>https://progcortex.mybb.ru/viewtopic.php?pid=5#p5</link>
			<description>&lt;p&gt;В этой ветке я буду приводить код к урокам аналогичные с учебным курсом по STM32 Владимира Воробьева. (&lt;a href=&quot;https://vk.com/club116656325&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://vk.com/club116656325&lt;/a&gt;). Все уроки будут написаны на CMSIS с максимальным использованием аппаратных возможностей stm32. Скорее всего на один урок может быть будет несколько проектов с нарастающей сложностью. Цель данных уроков создать базу знаний по микроконтроллерам stm32.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (MasterElectric)</author>
			<pubDate>Wed, 31 Jan 2018 21:09:04 +0300</pubDate>
			<guid>https://progcortex.mybb.ru/viewtopic.php?pid=5#p5</guid>
		</item>
		<item>
			<title>RCC - Reset and clock control</title>
			<link>https://progcortex.mybb.ru/viewtopic.php?pid=4#p4</link>
			<description>&lt;p&gt;Включение тактирование модулей МК.&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 12em&quot;&gt;&lt;pre&gt;
  // включаем тактирование модулей
  RCC-&amp;gt;AHBENR = 0x14 | RCC_AHBENR_DMA1EN;
  RCC-&amp;gt;APB1ENR = RCC_APB1ENR_TIM2EN | RCC_APB1ENR_USART2EN;
  RCC-&amp;gt;APB2ENR = RCC_APB2ENR_SPI1EN | RCC_APB2ENR_USART1EN;
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
						&lt;p&gt;Регистры AHBENR, APB1ENR, APB2ENR отвечают за включение тактирования модулей, которые сидят на соответствующих шинах AHB, APB1, APB2.&lt;/p&gt;</description>
			<author>mybb@mybb.ru (MasterElectric)</author>
			<pubDate>Tue, 30 Jan 2018 22:34:15 +0300</pubDate>
			<guid>https://progcortex.mybb.ru/viewtopic.php?pid=4#p4</guid>
		</item>
	</channel>
</rss>
