Пт июл 07, 2017 23:41:52
#include "stm32f3xx.h"
void SetRCC()
{
RCC_OscInitTypeDef osc_def;
RCC_ClkInitTypeDef clk_def;
RCC_PeriphCLKInitTypeDef per_def;
HAL_RCC_EnableCSS();
osc_def.OscillatorType = RCC_OSCILLATORTYPE_HSE;
osc_def.HSEState = RCC_HSE_ON;
osc_def.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
osc_def.LSEState = RCC_LSE_OFF;
osc_def.HSIState = RCC_HSI_OFF;
osc_def.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
osc_def.LSIState = RCC_LSI_OFF;
osc_def.PLL.PLLState = RCC_PLL_ON;
osc_def.PLL.PLLSource = RCC_PLLSOURCE_HSE;
osc_def.PLL.PLLMUL = RCC_PLL_MUL9;
HAL_RCC_OscConfig(&osc_def);
clk_def.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
clk_def.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
clk_def.AHBCLKDivider = RCC_SYSCLK_DIV1;
clk_def.APB1CLKDivider = RCC_HCLK_DIV2;
clk_def.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&clk_def, FLASH_LATENCY_2);
per_def.RTCClockSelection = RCC_PERIPHCLK_TIM1;
per_def.Tim1ClockSelection = RCC_TIM1CLK_HCLK;
HAL_RCCEx_PeriphCLKConfig(&per_def);
}
void SetGPIOs()
{
GPIO_InitTypeDef pin_out;
__HAL_RCC_GPIOE_CLK_ENABLE();
pin_out.Pin = GPIO_PIN_9 | GPIO_PIN_11;
pin_out.Mode = GPIO_MODE_AF_PP;
pin_out.Pull = GPIO_PULLDOWN;
pin_out.Speed = GPIO_SPEED_FREQ_HIGH;
pin_out.Alternate = GPIO_AF2_TIM1;
HAL_GPIO_Init(GPIOE, &pin_out);
}
void InitTim1()
{
TIM_HandleTypeDef htim1;
TIM_OC_InitTypeDef pwm;
__HAL_RCC_TIM1_CLK_ENABLE();
HAL_TIM_PWM_MspInit(&htim1);
htim1.Instance = TIM1;
htim1.Init.Prescaler = 1200 - 1;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 1200 - 1;
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
HAL_TIM_PWM_Init(&htim1);
pwm.OCMode = TIM_OCMODE_PWM2;
pwm.Pulse = 0;
pwm.OCPolarity = TIM_OCPOLARITY_HIGH;
pwm.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim1, &pwm, TIM_CHANNEL_1);
pwm.OCMode = TIM_OCMODE_PWM2;
pwm.Pulse = 0;
pwm.OCPolarity = TIM_OCPOLARITY_HIGH;
pwm.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim1, &pwm, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
TIM1->CCR1 = 600;
TIM1->CCR2 = 600;
}
int main(void)
{
SetRCC();
SetGPIOs();
InitTim1();
while(1)
{
}
}
Сб июл 08, 2017 06:56:57
Сб июл 08, 2017 09:15:12
Сб июл 08, 2017 10:16:05
Вс июл 30, 2017 18:35:49
void RCC_Init(void) {
uint32_t i;
RCC->CR |= RCC_CR_HSEON;
i=0;
while (!(RCC->CR & RCC_CR_HSERDY)) { }; // Ожидаем запуска собственно кристалла
// Flash: Enable Perfetch + Latency = 1 cycle (24..48MHz)
FLASH->ACR |= FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY_0;
// PLL input = HSE / 2 = 6MHz, PLL_MUL = 5 = 30MHz, PLL.SRC = HSE,
RCC->CFGR |= RCC_CFGR_PLLXTPRE_HSE_DIV2 | RCC_CFGR_PLLMULL5 | RCC_CFGR_PLLSRC | RCC_CFGR_ADCPRE_DIV8;
// Запускаем сам PLL
RCC->CR |= RCC_CR_PLLON;
// Ожидаем готовности
while (!(RCC->CR & RCC_CR_PLLRDY)) { };
i = RCC->CFGR;
i &= ~(RCC_CFGR_SW);
i |= RCC_CFGR_SW_PLL;
RCC->CFGR = i;
RCC->APB1ENR |= RCC_APB1ENR_PWREN; // Разрешаем работу PWR модуля
};