📄 hw_config.c
字号:
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_it.h"
#include "main.h"
#include "hw_config.h"
#include "sdcard.h"
#include "Include.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
ErrorStatus HSEStartUpStatus;
/* Extern variables ----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
static void RCC_Config(void);
/* Private functions ---------------------------------------------------------*/
/********************************************************************
函数功能:系统初始化
入口参数:无。
返 回:无。
备 注:
设置系统时钟
初始化各外设时钟
打开需要用的外设
中断设置
配制IO引脚,定义IO功能
初始化存储器
初始化USB
********************************************************************/
void System_Init(void)
{
/* RCC configuration */
RCC_Config(); //与时钟相关的寄存器配制
//IO配制 ------------------
// USB_Disconnect_Config(); //USB软连接断开控制引脚
/* nand configuration */
// RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); //使能
//FlashInit(); //初始化NAND
SD_Init();
// Set_USBClock(); //设置USB时钟
// USB_Interrupts_Config(); //USB中断配制
// USB_Init();
}
/*******************************************************************************
* Function Name : Set_System
* Description : Configures Main system clocks & power
* Input : None.
* Return : None.
*******************************************************************************/
static void RCC_Config(void)
{
/* RCC system reset(for debug purpose) */
RCC_DeInit(); //将RCC寄存器设备缺省值
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON); //外部高速振荡器HSE 开启
/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待HSE启动
if (HSEStartUpStatus == SUCCESS) //如果HSE晶振稳定且就绪
{
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //预取指缓存使能
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2); //设置FLASH存储器延时时钟周期数为2延时周期
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟=系统时钟
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1); //设置APB2时钟 = HCLK
/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2); //设置APB1时钟 = HCLK/2
/* ADCCLK = PCLK2/6 */
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC时钟=PCLK/6
//PLL设置
//PLL输入时钟=HSE时钟频率 输出 9倍频(HSE×9)
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //72M
/* Enable PLL */
RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL就绪
{}
/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //选择PLL作为系统时钟
/* Wait till PLL is used as system clock source */
//等待设置系统时钟为PLL成功
//返回值为 00:HSI 04:HSE 08:PLL
while (RCC_GetSYSCLKSource() != 0x08)
{}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO , ENABLE);
/* DMA1 and DMA2 clock enable */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 | RCC_AHBPeriph_DMA2, ENABLE);
// 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
if(SD_nCD_STATUS() == SD_NOT_IN) //sd insert or not
{
gEquipStatus.SD_status = STA_NODISK;
}
else
{
gEquipStatus.SD_status = disk_initialize(0);
// SD_insert_IRQ_flag = TRUE;
// if(gEquipStatus.SD_status == STA_OK)
// {
// if(SD_WP_STATUS() == SD_YES_WP) { gEquipStatus.SD_status = STA_PROTECT; }
// }
}
}
}
/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -