STM32 RS-232C via USART

ArduinoでのRS-232C制御は以前に行った。STM32からAMD3202を介してのRS232-C.

1.ピン配置 

ConnectivityでUSARTを選択(この場合は、干渉のないUSART3を選択)。modeとしてAsynchonousを選択。他はデフォルトでOK。

2・コーディング

  uint8_t Knum=0;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /*RS-232C via USART*/

  if (Knum==0){
  char RS232msg[] ="K1\n";
  HAL_UART_Transmit(&huart3,(uint8_t *)RS232msg,strlen(RS232msg),500);
  Knum=1;
  }
  else{
  char RS232msg[] ="K0\n";
  HAL_UART_Transmit(&huart3,(uint8_t *)RS232msg,strlen(RS232msg),500);
  Knum=0;
  }

  char RS232msg2[] ="K?\n";
  HAL_UART_Transmit(&huart3,(uint8_t *)RS232msg2,strlen(RS232msg2),500);
  HAL_Delay(1000);

  char USART_buff[128];
  memset(USART_buff, 0, 128);
  HAL_UART_Receive(&huart3, (uint8_t *)USART_buff,sizeof(USART_buff), 500);
  HAL_Delay(1000);
  ssd1306_SetCursor(0, 8*2);
  ssd1306_WriteString(USART_buff, Font_6x8, White);
  ssd1306_UpdateScreen();
}

上の例は、NEW Portのパワーメーターの例。状態を変化させて、その状態を聞くというよううなコマンドであれば同じようにテストをする事はできる。
RS232msg[] ="K1\n";の部分に送りたいコマンドを入れる。装置によって\nのターミネーションは適正にいれる。strlen(RS232msg)で長さを正確に送る。長さが違うとはじめのコマンドは受け付けるが、それ以降うけつけなくなるというような事が発生する。





コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

Attiny85 FuseRest

HS101 STM32の自作お手軽オシロスコープ