STM32 및 BleuiO를 사용하여 BLE 프로젝트 만들기
26275 단어 stm32bluetoothlowenergy
1. 머리말
STM32Cube 프로젝트를 BleuiO 암호화 개와 통신할 수 있는 USB CDC 호스트로 설정하는 빠른 방법을 보여주는 간단한 예다.
BleuiO 암호화 개가 핵인판 USB 포트에 연결되면 STM32가 이를 인식합니다.그리고 UART에서 3개의 다른 입력을 받고 입력에 따라 BleuiO 암호화 개에게 3개의 사전 프로그래밍 명령 중 하나를 보냅니다.
이 예에서 사용되는 명령은 다음과 같습니다.
ATI(개 정보 암호화)
AT+ADVSTART(광고 시작)
AT+ADVSTOP(광고 중지)
다른 설정을 사용하려면 USB 호스트를 지원하는지 확인하고 GPIO 설정이 다를 수 있으니 다시 설정해야 할 수도 있습니다.국제올림픽위원회 문건.
2. 코드 정보
당신은 아이템을 얻을 수 있습니다HERE
새 STM32 프로젝트를 기반으로 합니다.IOC 문서:
연결에서 USB OTG FS 모드가 호스트 전용 모드로 변경되고 NVIC 설정에서 모든 글로벌 중단이 활성화됩니다.
중간부품 아래에서 USB 호스트 - FS IP 클래스가 통신 호스트 클래스(가상 포트 Com)로 설정됩니다.
이 기능은 호스트에서 로더가 언제 완료되고 BleuiO 펌웨어가 언제 실행되는지 식별할 수 있도록 usb 호스트의 USBH 사용자 프로세스 기능에 추가되었습니다.c'(USB 호스트 -> 적용 폴더 아래에 있음):
static void USBH_UserProcess (USBH_HandleTypeDef *phost, uint8_t id)
{
/* USER CODE BEGIN CALL_BACK_1 */
switch(id)
{
case HOST_USER_SELECT_CONFIGURATION:
break;
case HOST_USER_DISCONNECTION:
Appli_state = APPLICATION_DISCONNECT;
isBleuIOReady = false;
// Turn on Red LED, turn off Green and Yellow LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);
break;
case HOST_USER_CLASS_ACTIVE:
Appli_state = APPLICATION_READY;
// Check if BleuIO firmware is running
// (idProduct:0x6001 = bootloader, idProduct:0x6002 = bleuio fw)
if(phost->device.DevDesc.idProduct == 0x6002)
{
isBleuIOReady = true;
// Sends message to uart that BleuIO is connected and ready
HAL_UART_Transmit(&huart3, (uint8_t*)BLEUIO_READY, strlen(BLEUIO_READY), HAL_MAX_DELAY);
// Turn on Green LED, turn off Yellow and Red LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);
// Start receiving from usb
USBH_CDC_Receive(&hUsbHostFS, CDC_RX_Buffer, RX_BUFF_SIZE);
}
break;
case HOST_USER_CONNECTION:
Appli_state = APPLICATION_START;
isBleuIOReady = false;
// Turn on Yellow LED, turn off Green and Red LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);
break;
default:
break;
}
/* USER CODE END CALL_BACK_1 */
}
Nucleo 보드의 녹색, 빨간색, 노란색 LED도 연결 상태에 따라 설정됩니다.Red = Disconnnected.
Yellow = Connecting.
Green = Connected.
이메일에서 암호화된 개의 상태에 액세스할 수 있도록 외부 변수 bool ISBLEUOREADY를 설정합니다.c.
BleuiO 암호화 개의 연결이 확인되면 USBH CDC 수신 기능이 실행되어 USB CDC로부터 데이터를 받습니다.
USBH CDC ReceiveCallback을 구현해야 합니다.
void USBH_CDC_ReceiveCallback(USBH_HandleTypeDef *phost)
{
if(phost == &hUsbHostFS)
{
// Handles the data recived from the USB CDC host, here just printing it out to UART
rx_size = USBH_CDC_GetLastReceivedDataSize(phost);
HAL_UART_Transmit(&huart3, CDC_RX_Buffer, rx_size, HAL_MAX_DELAY);
// Reset buffer and restart the callback function to receive more data
memset(CDC_RX_Buffer,0,RX_BUFF_SIZE);
USBH_CDC_Receive(phost, CDC_RX_Buffer, RX_BUFF_SIZE);
}
return;
}
이 예에서는 수신된 데이터가 UART에 다시 표시되기만 합니다.USBH CDC 전송 기능을 사용하여 암호화된 개에게 데이터를 전송합니다.
이 예에서 UART는 다른 명령을 보내는 데 사용할 명령을 입력합니다.
이를 위해, 우리는main에서 접근할 수 있는 포장 함수를 만들었습니다.c:
/**
* @brief Simple function that takes a string and transmit it to the dongle
* @retval None
*/
void writeToDongle(uint8_t * cmd)
{
USBH_CDC_Transmit(&hUsbHostFS, cmd, strlen((char *)cmd));
}
전반적으로 말하면.c HAL UART RxCpltCallback은 UART에서 입력한 내용과 간단한 UART 입력 프로세서를 수신하는 데 사용됩니다.void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
if(UartHandle == &huart3)
{
RX_value = (int)aRxBuffer[0];
uartStatus = UART_RX_NONE;
switch(RX_value)
{
case UART_RX_0:
{
uartStatus = UART_RX_0;
break;
}
case UART_RX_1:
{
uartStatus = UART_RX_1;
break;
}
case UART_RX_2:
{
uartStatus = UART_RX_2;
break;
}
default:
{
uartStatus = UART_RX_NONE;
break;
}
}
// Resets uart recieve interrupt mode
HAL_UART_Receive_IT(&huart3, (uint8_t *)aRxBuffer, RXBUFFERSIZE);
}
}
/**
* @brief Simple uart input handler
* @retval None
*/
void handleUartInput(UARTCommandTypeDef cmd)
{
switch(cmd)
{
case UART_RX_0:
{
// 0
uart_buf_len = sprintf(uart_tx_buf, "\r\n(0 pressed)\r\n");
HAL_UART_Transmit(&huart3, (uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);
if(isBleuIOReady)
{
writeToDongle((uint8_t*)DONGLE_CMD_ATI);
} else
{
uart_buf_len = sprintf(uart_tx_buf, BLEUIO_NOT_READY_MSG);
HAL_UART_Transmit(&huart3, (uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);
}
uartStatus = UART_RX_NONE;
break;
}
case UART_RX_1:
{
// 1
uart_buf_len = sprintf(uart_tx_buf, "\r\n(1 pressed)\r\n");
HAL_UART_Transmit(&huart3, (uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);
if(isBleuIOReady)
{
writeToDongle((uint8_t*)DONGLE_CMD_AT_ADVSTART);
} else
{
uart_buf_len = sprintf(uart_tx_buf, BLEUIO_NOT_READY_MSG);
HAL_UART_Transmit(&huart3, (uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);
}
uartStatus = UART_RX_NONE;
break;
}
case UART_RX_2:
{
// 2
uart_buf_len = sprintf(uart_tx_buf, "\r\n(2 pressed)\r\n");
HAL_UART_Transmit(&huart3, (uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);
if(isBleuIOReady)
{
writeToDongle((uint8_t*)DONGLE_CMD_AT_ADVSTOP);
} else
{
uart_buf_len = sprintf(uart_tx_buf, BLEUIO_NOT_READY_MSG);
HAL_UART_Transmit(&huart3, (uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);
}
uartStatus = UART_RX_NONE;
break;
}
case UART_RX_NONE:
{
break;
}
default:
{
uartStatus = UART_RX_NONE;
break;
}
}
}
handleUartInput () 는 입력 0, 1, 2를 처리하고 입력마다 특정한 암호화 개 명령에 비추습니다.그리고 처리 프로그램은 주 순환에 넣습니다. /* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
MX_USB_HOST_Process();
/* USER CODE BEGIN 3 */
// Simple handler for uart input
handleUartInput(uartStatus);
}
/* USER CODE END 3 */
3. 예제 항목 사용
3.1 필요한 것
암호화 개를 핵인판에 연결하려면 USB a - Micro USB B 케이블과 USB a 어댑터를 사용할 수 있습니다.
4. 프로젝트 설정 방법
4.1 GitHub에서 프로젝트 다운로드
항목 가져오기HERE
프로젝트를 복제하거나 zip 파일로 다운로드하여 STM32CubeIDE 작업공간으로 압축을 풉니다.
4.2 기존 프로젝트로 가져오기
5. 샘플 실행
Serial port Setup:
Baudrate: 115200
Data Bits: 8
Parity: None
Stop Bits: 1
Flow Control: None
0 장치 정보 획득:
2. 광고 중지:
암호화 개 응답은 UART에 인쇄됩니다.
6. 링크
Reference
이 문제에 관하여(STM32 및 BleuiO를 사용하여 BLE 프로젝트 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bleuiot/create-ble-project-with-stm32-and-bleuio-fk7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)