Hardware_Init.c

#include "Sub_Sys.h"

void RCC_Configuration(void) 
{ 
     RCC_DeInit();
     RCC_HSICmd(ENABLE);
     while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //加此句,要加载库文件 :stm32f10x_flash.c
     FLASH_SetLatency(FLASH_Latency_2); 
     
     RCC_HCLKConfig(RCC_SYSCLK_Div1);    
     RCC_PCLK1Config(RCC_HCLK_Div2); 
     RCC_PCLK2Config(RCC_HCLK_Div1); 
      
     //RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_2);  
     RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);//16倍频 计算方式: RC 8M/2 *16 =64M 
     RCC_PLLCmd(ENABLE);
     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);    
     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
     while(RCC_GetSYSCLKSource() != 0x08);     
}
//配置端口
void App_PortCfg(void)
{	
    GPIO_InitTypeDef GPIO_InitStructure;
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);	//使能GPIO时钟
		
	  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO ,ENABLE);//重映射需要先使能AFIO时钟
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//只关闭JTAG而保留SWD
		
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10; //PA.5-10
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	//推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9

		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13
		                              |GPIO_Pin_14|GPIO_Pin_15; //PB
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	//推挽输出
    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化PB
		
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //PC
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	//推挽输出
    GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC	
		
		Buzzer_OFF;
		
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //PA
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;	//复用输入
    GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA			
		
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; //PB
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;	//复用输入
    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB			
		RS485_RX;
		
}
//串口2初始化
void USART2_Configuration(void)
{
  USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef  NVIC_InitStructure;
  DMA_InitTypeDef   DMA_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	
	USART_DeInit(USART2);
   //使能USART2,GPIOB
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

  //使能GPIOA
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//使能外设时钟
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;                    //GPIO_Pin_2 USART2 TX
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;              //USART2 TX
  GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                    //GPIO_Pin_2 USART2 RX
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;              //USART2 RX
  GPIO_Init(GPIOA, &GPIO_InitStructure);
	
  USART_InitStructure.USART_BaudRate = 2400;            //只修改波特率
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	
	USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE); //使能USART2 DMA发送     
  //串口初始化
  USART_Init(USART2, &USART_InitStructure);
	
	USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//使能接受中断
	USART_ITConfig(USART2, USART_IT_TC, ENABLE);//使能接受中断
	
  //使能USART1
  USART_Cmd(USART2, ENABLE);
  

  //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  //设定USART1 中断优先级
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
	
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);                          //启动DMA时钟  
	
  DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART2->DR);              //DMA外设基地址
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)Uart1_Val.Send_Data;//USART2_VAL1.USART1_TxBuffer;//DMA内存基地址
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;                          //数据传输方向,从内存读取发送到外设
  DMA_InitStructure.DMA_BufferSize = USART2_SEND_BUFFER_LEN;                  //DMA通道的DMA缓存的大小
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;            //外设地址寄存器不变
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                     //内存地址寄存器递增
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;     //数据宽度为8位
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;             //数据宽度为8位
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;                               //工作在正常模式
  DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;                       //DMA通道 x拥有中优先级 
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;                                //DMA通道x没有设置为内存到内存传输
  DMA_Init(DMA1_Channel7, &DMA_InitStructure);                                //根据DMA_InitStruct中指定的参数初始化DMA的通道USART1_Tx_DMA_Channel所标识的寄存器      
}
//USART2数据发送
void USART2_Send_Data(uint32_t Len)
{
	//RS485_RT1_TX;
	
	DMA_Cmd(DMA1_Channel7,DISABLE); 
  DMA_SetCurrDataCounter(DMA1_Channel7,Len);                     //设置传输数据长度
  DMA_Cmd(DMA1_Channel7,ENABLE);  
}
//看门狗初始化
void IWDG_Init(u8 prer,u16 rlr)
{
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); /* 使能对寄存器IWDG_PR和IWDG_RLR的写操作*/
    IWDG_SetPrescaler(prer);    /*设置IWDG预分频值:设置IWDG预分频值*/
    IWDG_SetReload(rlr);     /*设置IWDG重装载值*/
    IWDG_ReloadCounter();    /*按照IWDG重装载寄存器的值重装载IWDG计数器*/
    IWDG_Enable();        /*使能IWDG*/
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值