/** * @brief VCP_Ctrl * Manage the CDC class requests * @param Cmd: Command code * @param Buf: Buffer containing command data (request parameters) * @param Len: Number of data to be sent (in bytes) * @retval Result of the operation (USBD_OK in all cases) */ static uint16_t VCP_Ctrl (uint32_t Cmd, uint8_t* Buf, uint32_t Len) { switch (Cmd) { case SEND_ENCAPSULATED_COMMAND: /* Not needed for this driver */ break; case GET_ENCAPSULATED_RESPONSE: /* Not needed for this driver */ break; case SET_COMM_FEATURE: /* Not needed for this driver */ break; case GET_COMM_FEATURE: /* Not needed for this driver */ break; case CLEAR_COMM_FEATURE: /* Not needed for this driver */ break; case SET_LINE_CODING: linecoding.bitrate = (uint32_t)(Buf[0] | (Buf[1] << 8) | (Buf[2] << 16) | (Buf[3] << 24)); linecoding.format = Buf[4]; linecoding.paritytype = Buf[5]; linecoding.datatype = Buf[6]; /* Set the new configuration */ VCP_COMConfig(OTHER_CONFIG); break; case GET_LINE_CODING: Buf[0] = (uint8_t)(linecoding.bitrate); Buf[1] = (uint8_t)(linecoding.bitrate >> 8); Buf[2] = (uint8_t)(linecoding.bitrate >> 16); Buf[3] = (uint8_t)(linecoding.bitrate >> 24); Buf[4] = linecoding.format; Buf[5] = linecoding.paritytype; Buf[6] = linecoding.datatype; break; case SET_CONTROL_LINE_STATE: /* Not needed for this driver */ break; case SEND_BREAK: /* Not needed for this driver */ break; default: break; } return USBD_OK; }
/** * @brief VCP_COMConfig * Configure the COM Port with default values or values received from host. * @param Conf: can be DEFAULT_CONFIG to set the default configuration or OTHER_CONFIG * to set a configuration received from the host. * @retval None. */ static uint16_t VCP_COMConfig(uint8_t Conf) { #if 0 if (Conf == DEFAULT_CONFIG) { /* EVAL_COM1 default configuration */ /* EVAL_COM1 configured as follow: - BaudRate = 115200 baud - Word Length = 8 Bits - One Stop Bit - Parity Odd - Hardware flow control disabled - Receive and transmit enabled */ 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_Odd; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /* Configure and enable the USART */ STM_EVAL_COMInit(COM1, &USART_InitStructure); /* Enable the USART Receive interrupt */ USART_ITConfig(EVAL_COM1, USART_IT_RXNE, ENABLE); } else { /* set the Stop bit*/ switch (linecoding.format) { case 0: USART_InitStructure.USART_StopBits = USART_StopBits_1; break; case 1: USART_InitStructure.USART_StopBits = USART_StopBits_1_5; break; case 2: USART_InitStructure.USART_StopBits = USART_StopBits_2; break; default : VCP_COMConfig(DEFAULT_CONFIG); return (USBD_FAIL); } /* set the parity bit*/ switch (linecoding.paritytype) { case 0: USART_InitStructure.USART_Parity = USART_Parity_No; break; case 1: USART_InitStructure.USART_Parity = USART_Parity_Even; break; case 2: USART_InitStructure.USART_Parity = USART_Parity_Odd; break; default : VCP_COMConfig(DEFAULT_CONFIG); return (USBD_FAIL); } /*set the data type : only 8bits and 9bits is supported */ switch (linecoding.datatype) { case 0x07: /* With this configuration a parity (Even or Odd) should be set */ USART_InitStructure.USART_WordLength = USART_WordLength_8b; break; case 0x08: if (USART_InitStructure.USART_Parity == USART_Parity_No) { USART_InitStructure.USART_WordLength = USART_WordLength_8b; } else { USART_InitStructure.USART_WordLength = USART_WordLength_9b; } break; default : VCP_COMConfig(DEFAULT_CONFIG); return (USBD_FAIL); } USART_InitStructure.USART_BaudRate = linecoding.bitrate; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /* Configure and enable the USART */ STM_EVAL_COMInit(COM1, &USART_InitStructure); } #endif return USBD_OK; }
/** * @brief VCP_COMConfig * Configure the COM Port with default values or values received from host. * @param Conf: can be DEFAULT_CONFIG to set the default configuration or OTHER_CONFIG * to set a configuration received from the host. * @retval None. */ uint16_t VCP_COMConfig(uint8_t Conf, LINE_CODING linecoding) { if (Conf == DEFAULT_CONFIG) { /* - BaudRate = 115200 baud - Word Length = 8 Bits - One Stop Bit - Parity Odd - Hardware flow control disabled - Receive and transmit enabled */ MX_USART3_UART_Init(); /* Enable the USART Receive interrupt */ //USART_ITConfig(EVAL_COM1, USART_IT_RXNE, ENABLE); } else { /* set the Stop bit*/ switch (linecoding.format) { case 0: huart3.Init.StopBits = UART_STOPBITS_1; break; case 1: huart3.Init.StopBits = UART_STOPBITS_1; break; case 2: huart3.Init.StopBits = UART_STOPBITS_2; break; default : VCP_COMConfig(DEFAULT_CONFIG,linecoding_def); return (USBD_FAIL); } /* set the parity bit*/ switch (linecoding.paritytype) { case 0: huart3.Init.Parity = UART_PARITY_NONE; break; case 1: huart3.Init.Parity = UART_PARITY_EVEN; break; case 2: huart3.Init.Parity = UART_PARITY_ODD; break; default : VCP_COMConfig(DEFAULT_CONFIG,linecoding_def); return (USBD_FAIL); } /*set the data type : only 8bits and 9bits is supported */ switch (linecoding.datatype) { case 0x07: /* With this configuration a parity (Even or Odd) should be set */ huart3.Init.WordLength = UART_WORDLENGTH_8B; break; case 0x08: if (huart3.Init.Parity == UART_PARITY_NONE) { huart3.Init.WordLength = UART_WORDLENGTH_8B; } else { huart3.Init.WordLength = UART_WORDLENGTH_9B; } break; default : VCP_COMConfig(DEFAULT_CONFIG,linecoding_def); return (USBD_FAIL); } huart3.Init.BaudRate = linecoding.bitrate; huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart3.Init.Mode = UART_MODE_TX_RX; /* Configure and enable the USART */ HAL_UART_Init(&huart3); } return USBD_OK; }
/** * @brief VCP_COMConfig * Configure the COM Port with default values or values received from host. * @param Conf: can be DEFAULT_CONFIG to set the default configuration or OTHER_CONFIG * to set a configuration received from the host. * @retval None. */ static uint16_t VCP_COMConfig(uint8_t Conf) { // BV: Not calling physical USART configuration // Suggest we do not use this mechanism for any SPI configurations. But used some sort of serial commands. // Not sure if it affects the data but just in case we should set 8N1 to ensure full 8-bit data transfer is done. #if 0 if (Conf == DEFAULT_CONFIG) { /* EVAL_COM1 default configuration */ /* EVAL_COM1 configured as follow: - BaudRate = 115200 baud - Word Length = 8 Bits - One Stop Bit - Parity Odd - Hardware flow control disabled - Receive and transmit enabled */ 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_Odd; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /* Configure and enable the USART */ STM_EVAL_COMInit(COM1, &USART_InitStructure); /* Enable the USART Receive interrupt */ USART_ITConfig(EVAL_COM1, USART_IT_RXNE, ENABLE); } else { /* set the Stop bit*/ switch (linecoding.format) { case 0: USART_InitStructure.USART_StopBits = USART_StopBits_1; break; case 1: USART_InitStructure.USART_StopBits = USART_StopBits_1_5; break; case 2: USART_InitStructure.USART_StopBits = USART_StopBits_2; break; default : VCP_COMConfig(DEFAULT_CONFIG); return (USBD_FAIL); } /* set the parity bit*/ switch (linecoding.paritytype) { case 0: USART_InitStructure.USART_Parity = USART_Parity_No; break; case 1: USART_InitStructure.USART_Parity = USART_Parity_Even; break; case 2: USART_InitStructure.USART_Parity = USART_Parity_Odd; break; default : VCP_COMConfig(DEFAULT_CONFIG); return (USBD_FAIL); } /*set the data type : only 8bits and 9bits is supported */ switch (linecoding.datatype) { case 0x07: /* With this configuration a parity (Even or Odd) should be set */ USART_InitStructure.USART_WordLength = USART_WordLength_8b; break; case 0x08: if (USART_InitStructure.USART_Parity == USART_Parity_No) { USART_InitStructure.USART_WordLength = USART_WordLength_8b; } else { USART_InitStructure.USART_WordLength = USART_WordLength_9b; } break; default : VCP_COMConfig(DEFAULT_CONFIG); return (USBD_FAIL); } USART_InitStructure.USART_BaudRate = linecoding.bitrate; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; /* Configure and enable the USART */ STM_EVAL_COMInit(COM1, &USART_InitStructure); } #endif return USBD_OK; }