Вс ноя 18, 2018 20:25:30
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
int main(void)
{
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int i;
//******************************************************************************************************************************
{ //настройка портов
GPIO_InitTypeDef GPIO_InitStructure; /* Initialize Leds mounted on STM32 board */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); /* Initialize LED which connected to PC13, Enable the Clock*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; /* Configure the GPIO_LED pin */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//----------
//GPIO_InitTypeDef GPIO_InitStructure; /* Initialize Leds mounted on STM32 board */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /* Initialize LED which connected to PC13, Enable the Clock*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; /* Configure the GPIO_LED pin */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//----------
}
{ //настройка тактирования
ErrorStatus HSEStartUpStatus;
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ----------*/
RCC_DeInit(); /* Системный RESET RCC (делать не обязательно, но полезно на этапе отладки) */
RCC_HSEConfig( RCC_HSE_ON); /* Включаем HSE (внешний кварц) */
HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* Ждем пока HSE будет готов */
if (HSEStartUpStatus == SUCCESS) /* Если с HSE все в порядке */
{
/* Следующие две команды касаются исключительно работы с FLASH.
Если вы не собираетесь использовать в своей программе функций работы с Flash,
FLASH_PrefetchBufferCmd( ) та FLASH_SetLatency( ) можно закомментировать */
//FLASH_PrefetchBufferCmd( FLASH_PrefetchBuffer_Enable); /* Включаем Prefetch Buffer */
/* FLASH Latency.
Рекомендовано устанавливать:
FLASH_Latency_0 - 0 < SYSCLK? 24 MHz
FLASH_Latency_1 - 24 MHz < SYSCLK ? 48 MHz
FLASH_Latency_2 - 48 MHz < SYSCLK ? 72 MHz */
//FLASH_SetLatency( FLASH_Latency_2);
RCC_HCLKConfig( RCC_SYSCLK_Div1); /* HCLK = SYSCLK */ /* Смотри на схеме AHB Prescaler. Частота не делится (RCC_SYSCLK_Div1) */
RCC_PCLK2Config( RCC_HCLK_Div1); /* PCLK2 = HCLK */ /* Смотри на схеме APB2 Prescaler. Частота не делится (RCC_HCLK_Div1) */
RCC_PCLK1Config( RCC_HCLK_Div2); /* PCLK1 = HCLK/2 */ /* Смотри на схеме APB1 Prescaler. Частота делится на 2 (RCC_HCLK_Div2) потому что на выходе APB1 должно быть не более 36МГц (смотри схему) */
/* PLLCLK = 8MHz * 9 = 72 MHz */
/* Указываем PLL от куда брать частоту (RCC_PLLSource_HSE_Div1) и на сколько ее умножать (RCC_PLLMul_9) */
/* PLL может брать частоту с кварца как есть (RCC_PLLSource_HSE_Div1) или поделенную на 2 (RCC_PLLSource_HSE_Div2). Смотри схему */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd( ENABLE); /* Включаем PLL */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {} /* Ждем пока PLL будет готов */
RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK); /* Переключаем системное тактирование на PLL */
while (RCC_GetSYSCLKSource() != 0x08) {} /* Ждем пока переключиться */
}
else /* Проблемы с HSE. Тут можно написать свой код, если надо что-то делать когда микроконтроллер не смог перейти на работу с внешним кварцом */
{
while (1) {} /* Пока тут заглушка - вечный цикл*/
}
}
while (1)
{
// GPIOC->ODR ^= GPIO_Pin_13; /* Toggle LED which connected to PC13*/
// GPIOB->ODR ^= GPIO_Pin_0;
GPIO_ResetBits(GPIOC, GPIO_Pin_13); // Set C13 to Low level ("0")
for(i=0;i<0x5AE8BA;i++); /* delay */
GPIO_SetBits(GPIOC, GPIO_Pin_13); // Set C13 to High level ("1")
GPIO_SetBits(GPIOB, GPIO_Pin_0);
for(i=0;i<0x5AE8BA;i++); /* delay */
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
GPIO_SetBits(GPIOB, GPIO_Pin_1);
for(i=0;i<0x5AE8BA;i++); /* delay */
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
Вс ноя 18, 2018 20:50:27
Комп не справляется с симуляцией. Купите новый, более мощный, желательно топовый, или купите МК 103C8 за 1.5$.DENIS451 писал(а):если поставить 72мГц то симуляция вообще зависает?
Вс ноя 18, 2018 21:51:18
...
else /* Проблемы с HSE. Тут можно написать свой код, если надо что-то делать когда микроконтроллер не смог перейти на работу с внешним кварцом */
{
while (1) {} /* Пока тут заглушка - вечный цикл*/
}
Вс ноя 18, 2018 22:59:59
Этот МК не поддерживает частоту кварца больше 16 МГц. Пишите 8000000. Тем более что в коде написано.DENIS451 писал(а):если прописать в "Crystal Frequency:" число больше 51000000
/* PLLCLK = 8MHz * 9 = 72 MHz */
Почему тогда используете протеус?DENIS451 писал(а):У меня есть отладочная плата с STM32F103C6R6 и с STM32F103C8R6
Вс ноя 18, 2018 23:18:57