Пример #1
0
//----------------------------------------------------------
//	USART/UARTの設定
void Init_usart(USART_TypeDef *usart){
	USART_InitTypeDef USART_InitStructure;
	RCC_PeriphClock_USART(usart);

	//グローバル割り込み初期化の構造体を作る
	NVIC_InitTypeDef NVIC_InitStructure;

	if(usart == USART1){
		Init_af_port(USART1_TX_PORT,USART1_TX_PIN,GPIO_AF_USART1,PORT_OD|PORT_PULL_NO);
		Init_af_port(USART1_RX_PORT,USART1_RX_PIN,GPIO_AF_USART1,PORT_OD|PORT_PULL_NO);
	}else if(usart == USART2){
		Init_af_port(USART2_TX_PORT,USART2_TX_PIN,GPIO_AF_USART2,PORT_OD|PORT_PULL_NO);
		Init_af_port(USART2_RX_PORT,USART2_RX_PIN,GPIO_AF_USART2,PORT_OD|PORT_PULL_NO);
	}else if(usart == USART3){
		Init_af_port(USART3_TX_PORT,USART3_TX_PIN,GPIO_AF_USART3,PORT_OD|PORT_PULL_NO);
		Init_af_port(USART3_RX_PORT,USART3_RX_PIN,GPIO_AF_USART3,PORT_OD|PORT_PULL_NO);
	}else if(usart == UART4){
		Init_af_port(UART4_TX_PORT,UART4_TX_PIN,GPIO_AF_UART4,PORT_OD|PORT_PULL_NO);
		Init_af_port(UART4_RX_PORT,UART4_RX_PIN,GPIO_AF_UART4,PORT_OD|PORT_PULL_NO);
	}else if(usart == UART5){
		Init_af_port(UART5_TX_PORT,UART5_TX_PIN,GPIO_AF_UART5,PORT_OD|PORT_PULL_NO);
		Init_af_port(UART5_RX_PORT,UART5_RX_PIN,GPIO_AF_UART5,PORT_OD|PORT_PULL_NO);
	}else if(usart == USART6){
		Init_af_port(USART6_TX_PORT,USART6_TX_PIN,GPIO_AF_USART6,PORT_OD|PORT_PULL_NO);
		Init_af_port(USART6_RX_PORT,USART6_RX_PIN,GPIO_AF_USART6,PORT_OD|PORT_PULL_NO);
	}

	USART_InitStructure.USART_BaudRate = 38400;
	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_Tx | USART_Mode_Rx;
	USART_Init(usart, &USART_InitStructure);

	NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);

	USART_ITConfig(usart,USART_IT_RXNE,ENABLE);
	USART_Cmd(usart, ENABLE);

}
Пример #2
0
/******************************************************************************
*	タイトル : USART設定
*	  関数名 : Init_USART
*	   引数1 : USART_TypeDef型 *USARTx  USART番号
*	   引数2 : unsigned int型 baudrate  ボーレート
*	   引数3 : GPIO_TypeDef型 *GPIOx_TX  TXポート
*	   引数4 : uint16_t型 pin_TX  TXピン
*	   引数5 : GPIO_TypeDef型 *GPIOx_RX  RXポート
*	   引数6 : uint16_t型 pin_RX  RXピン
*	  作成者 : 石井岳史
*	  作成日 : 2014/11/12
******************************************************************************/
void Init_USART(USART_TypeDef *USARTx,unsigned int baudrate, GPIO_TypeDef *GPIOx_TX ,uint16_t pin_TX, GPIO_TypeDef *GPIOx_RX, uint16_t pin_RX){
	//構造体変数を宣言
	USART_InitTypeDef 	USART_InitStructure;
	NVIC_InitTypeDef 	NVIC_InitStructure;

	//モジュールストップ状態の解除
//	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    RCC_PeriphClock_USART(USARTx);
	//GPIOの設定
	Init_port(GPIO_Mode_AF,GPIOx_TX,pin_TX,GPIO_PuPd_NOPULL,GPIO_OType_PP);
	Init_port(GPIO_Mode_AF,GPIOx_RX,pin_RX,GPIO_PuPd_NOPULL,GPIO_OType_PP);

	//PINをオルタネィテブファンクションに割り当て

	GPIO_PinAFConfig(GPIOx_TX, Pin_select_source(pin_TX), GPIO_af_USART_select(USARTx));//USART1 TX/PB6
	GPIO_PinAFConfig(GPIOx_RX, Pin_select_source(pin_RX), GPIO_af_USART_select(USARTx));//USART1 RX/PB7


	//USART1の設定
	USART_InitStructure.USART_BaudRate 				= baudrate;							//ボーレートの設定
	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_Init(USARTx, &USART_InitStructure);											//USART1の設定
	USART_Cmd(USARTx, ENABLE);															//USART1周辺回路の有効化
	USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);										//USART1周辺回路の割込み有効化

	//割り込み設定
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);							//優先度のビット設定
	NVIC_InitStructure.NVIC_IRQChannel 						= USART_irqn_select(USARTx);	//有効化するIRQチャンネルの指定
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 	= 2;			//割り込みの優先順位(グループ)の指定。0が最優先
	NVIC_InitStructure.NVIC_IRQChannelSubPriority 			= 0;			//割り込みの優先順位(サブ)の指定。0が最優先
	NVIC_InitStructure.NVIC_IRQChannelCmd 					= ENABLE;		//割り込みの有効化
	NVIC_Init(&NVIC_InitStructure);											//割り込み設定
}