//---------------------------------------------------------- // 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); }
/****************************************************************************** * タイトル : 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); //割り込み設定 }