2017-05-24 16 views
0

端末からUSART1を送信し、USART2をGSMモデム[端末 - > USART1-> USART2->モデム]に送信しようとしています。 ATコマンドを送信した後、モデムは私に何も返送しません。どのような問題がありますか? USART1は完璧に動作しています。私はSTM32 NucleoとKeil uVision4を使用しています。USART2からGSMモデムでATコマンドを送信する[埋め込みC]

送信機能

void send_usart2(char *msg){ 
send_usart1("USART2 sending..."); send_usart1("\r\n"); 
while (*msg){ 
    while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); 
    USART_SendData(USART2, *msg++); 
    } 
    send_usart1("USART2 sending successful"); send_usart1("\r\n"); 
} 

USART2ハンドラ

void USART2_IRQHandler(void){ 
int index = 0; 
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET){ 
    USART_ClearITPendingBit(USART2, USART_IT_RXNE); 
    Received_values[index++] = USART_ReceiveData(USART2); 
    } 
} 

割り込み初期

void InitInterrupt2(void) { 
NVIC_InitTypeDef NVIC_InitStruct2;        
NVIC_InitStruct2.NVIC_IRQChannel = USART2_IRQn; 
NVIC_InitStruct2.NVIC_IRQChannelPreemptionPriority = 0; 
NVIC_InitStruct2.NVIC_IRQChannelSubPriority = 0;   
NVIC_InitStruct2.NVIC_IRQChannelCmd = ENABLE; 
NVIC_Init(&NVIC_InitStruct2); 
} 

UART初期

void InitUART2(void) {  
GPIO_InitTypeDef GPIO_InitStructure; 
USART_InitTypeDef USART_InitStructure; 
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 

USART_InitStructure.USART_BaudRate = 115200; 
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(USART2,&USART_InitStructure);   /* Configure USAR1 */      
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); 
USART_Cmd(USART2,ENABLE);      /* Enable the USART1 */            

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; 
GPIO_Init(GPIOA, &GPIO_InitStructure); 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; 
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; 
GPIO_Init(GPIOA, &GPIO_InitStructure); 
} 

これは私がどのように送信しているかのように見えます。

..... 
    send_usart2(Command_buffer);     
    send_usart1("Command: "); 
    send_usart1(Command_buffer); 
    send_usart1("\r\n");  
    memset(Command_buffer, NULL, sizeof(Command_buffer)); 
    os_dly_wait(500); 
    send_usart1("Received values: "); 
    send_usart1(Received_values); 
    send_usart1("\r\n"); 
    memset(Received_values, NULL, sizeof(Received_values)); 
    ....... 
+0

モデムへの送信コマンドバッファに '" \ r \ n ""はありませんか? – unwind

+0

私は行を追加しようとしましたsend_usart2( "\ r \ n"); send_usart2の後(Command_buffer);しかし、何も起こりません。 –

+1

あなたはそれがソフトウェアの問題だと思いますか?あなたは、データがUART回線に存在することを、GSMモジュールまで確認しましたか?オシロスコープでボーレートを測定しましたか? – Lundin

答えて

0

私はこのラインのフォームを構成するために必要なすべて:

USART_HardwareFlowControl = USART_HardwareFlowControl_None; 

へ:

USART_HardwareFlowControl = USART_HardwareFlowControl_RTS; 

これはUSART2とモデムは "握手" 接続タイプを必要とすることを意味します。

関連する問題