{"id":107,"date":"2021-11-16T14:25:41","date_gmt":"2021-11-16T14:25:41","guid":{"rendered":"https:\/\/www.bleuio.com\/blog\/?p=107"},"modified":"2022-07-01T10:38:53","modified_gmt":"2022-07-01T10:38:53","slug":"create-ble-project-with-stm32-and-bleuio","status":"publish","type":"post","link":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/","title":{"rendered":"Create BLE project with STM32 and BleuIO"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">1. Introduction<\/h2>\n\n\n\n<p>The project is a simple example showcasing a quick way to set up a STM32Cube project as a USB CDC Host capable of communicating with the BleuIO Dongle.<\/p>\n\n\n\n<p>When a BleuIO Dongle is connected to the Nucleo boards USB port the STM32 will recognize it. It will then accept 3 different inputs from the UART and send one of 3 preprogrammed commands to the BleuIO Dongle based on the input. The commands that are used in this example are:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>ATI<\/em>&nbsp;(Dongle Information)<\/li><li><em>AT+ADVSTART<\/em>&nbsp;(Starts Advertising)<\/li><li><em>AT+ADVSTOP<\/em>&nbsp;(Stops Advertising)<\/li><\/ul>\n\n\n\n<p>We have used a STM32 Nucleo-144 development board with STM32H743ZI MCU (STM32H743ZI micro mbed-Enabled Development Nucleo-144 series ARM\u00ae Cortex\u00ae-M7 MCU 32-Bit Embedded Evaluation Board) for this example.<\/p>\n\n\n\n<p>If you want to use another setup you will have to make sure it support USB Host and beware that the GPIO setup might be different and may need to be reconfigured in the .ioc file.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/www.bleuio.com\/getting_started\/docs\/stm32_example\/#2-about-the-code\"><\/a>2. About the Code<\/h2>\n\n\n\n<p>You can get project&nbsp;<strong><a href=\"https:\/\/github.com\/smart-sensor-devices-ab\/stm32_bleuio_example\">HERE<\/a><\/strong><br><a href=\"https:\/\/github.com\/smart-sensor-devices-ab\/stm32_bleuio_example\">https:\/\/github.com\/smart-sensor-devices-ab\/stm32_bleuio_example<\/a><\/p>\n\n\n\n<p>This project based on a new STM32 project with these changes in the .ioc file:<\/p>\n\n\n\n<p>Under \u2018Connectivity\u2019 the \u2018USB_OTG_FS\u2019-mode is changed to Host_Only and in the NVIC Settings all global interrupts are enabled.<br><br><img decoding=\"async\" src=\"https:\/\/www.bleuio.com\/getting_started\/img\/stm32_img\/USB_OTG_FS.png\" alt=\"alt text\"><\/p>\n\n\n\n<p>And under \u2018Middleware\u2019 the \u2018USB_HOST\u2019- \u2018Class for FS IP\u2019 is set to \u2018Communication Host Class (Virtual Port Com)\u2019.<br><br><img decoding=\"async\" src=\"https:\/\/www.bleuio.com\/getting_started\/img\/stm32_img\/USB_HOST.png\" alt=\"alt text\"><\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p><br>To make sure the host would recognize when the bootloader is done and the BleuIO firmware is running this was added in the USBH_UserProcess function in \u2018usb_host.c\u2019 (found under \u2018USB_HOST\u2019 -&gt; \u2018App\u2019 folder):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>static void USBH_UserProcess  (USBH_HandleTypeDef *phost, uint8_t id)\n{\n  <em>\/* USER CODE BEGIN CALL_BACK_1 *\/<\/em>\n  switch(id)\n  {\n  case HOST_USER_SELECT_CONFIGURATION:\n  break;\n\n  case HOST_USER_DISCONNECTION:\n  Appli_state = APPLICATION_DISCONNECT;\n  isBleuIOReady = false;\n\n  <em>\/\/ Turn on Red LED, turn off Green and Yellow LED<\/em>\n  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);\n  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_RESET);\n  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);\n  break;\n\n  case HOST_USER_CLASS_ACTIVE:\n  Appli_state = APPLICATION_READY;\n  <em>\/\/ Check if BleuIO firmware is running<\/em>\n  <em>\/\/ (idProduct:0x6001 = bootloader, idProduct:0x6002 = bleuio fw)<\/em>\n  if(phost-&gt;device.DevDesc.idProduct == 0x6002)\n  {\n      isBleuIOReady = true;\n      <em>\/\/ Sends message to uart that BleuIO is connected and ready<\/em>\n      HAL_UART_Transmit(&amp;huart3, (uint8_t*)BLEUIO_READY, strlen(BLEUIO_READY), HAL_MAX_DELAY);\n\n      <em>\/\/ Turn on Green LED, turn off Yellow and Red LED<\/em>\n      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);\n      HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_RESET);\n      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);\n\n      <em>\/\/ Start receiving from usb<\/em>\n      USBH_CDC_Receive(&amp;hUsbHostFS, CDC_RX_Buffer, RX_BUFF_SIZE);\n  }\n  break;\n\n  case HOST_USER_CONNECTION:\n  Appli_state = APPLICATION_START;\n  isBleuIOReady = false;\n  <em>\/\/ Turn on Yellow LED, turn off Green and Red LED<\/em>\n  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);\n  HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_SET);\n  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);\n  break;\n\n  default:\n  break;\n  }\n  <em>\/* USER CODE END CALL_BACK_1 *\/<\/em>\n}\n<\/code><\/pre>\n\n\n\n<p>The Green, Red and Yellow LEDs on the Nucleo board is also setup to change based on the connection status.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Red = Disconnnected.<br>Yellow = Connecting.<br>Green = Connected.<\/p><\/blockquote>\n\n\n\n<p>An external variable bool isBleuIOReady is also set so the status of the dongle is accessible from main.c.<\/p>\n\n\n\n<p>Once the BleuIO dongle is confirmed to be connected the USBH_CDC_Receive function is run to start reciving data from the USB CDC.<\/p>\n\n\n\n<p>The USBH_CDC_ReceiveCallback also needs to be implemented:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void USBH_CDC_ReceiveCallback(USBH_HandleTypeDef *phost)\n{\n    if(phost == &amp;hUsbHostFS)\n    {\n        <em>\/\/ Handles the data recived from the USB CDC host, here just printing it out to UART<\/em>\n        rx_size = USBH_CDC_GetLastReceivedDataSize(phost);\n        HAL_UART_Transmit(&amp;huart3, CDC_RX_Buffer, rx_size, HAL_MAX_DELAY);\n\n        <em>\/\/ Reset buffer and restart the callback function to receive more data<\/em>\n        memset(CDC_RX_Buffer,0,RX_BUFF_SIZE);\n        USBH_CDC_Receive(phost, CDC_RX_Buffer, RX_BUFF_SIZE);\n    }\n\n    return;\n}\n<\/code><\/pre>\n\n\n\n<p>In this example the recieved data is just echoed to the UART.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p><br>To send data to the Dongle the USBH_CDC_Transmit function is used. In this example UART input is used to send different commands.<\/p>\n\n\n\n<p>For this purpose a wrapper function has been created that can be accessed from main.c:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>\/**\n  * @brief Simple function that takes a string and transmit it to the dongle\n  * @retval None\n  *\/<\/em>\nvoid writeToDongle(uint8_t * cmd)\n{\n    USBH_CDC_Transmit(&amp;hUsbHostFS, cmd, strlen((char *)cmd));\n}\n<\/code><\/pre>\n\n\n\n<p>In main.c HAL_UART_RxCpltCallback is implemented to recieve input from Uart and a simple UART input handler:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)\n{\n    if(UartHandle == &amp;huart3)\n    {\n        RX_value = (int)aRxBuffer&#91;0];\n        uartStatus = UART_RX_NONE;\n\n        switch(RX_value)\n        {\n            case UART_RX_0:\n            {\n                uartStatus = UART_RX_0;\n                break;\n            }\n            case UART_RX_1:\n            {\n                uartStatus = UART_RX_1;\n                break;\n            }\n            case UART_RX_2:\n            {\n                uartStatus = UART_RX_2;\n                break;\n            }\n            default:\n            {\n                uartStatus = UART_RX_NONE;\n                break;\n            }\n        }\n        <em>\/\/ Resets uart recieve interrupt mode<\/em>\n        HAL_UART_Receive_IT(&amp;huart3, (uint8_t *)aRxBuffer, RXBUFFERSIZE);\n    }\n}\n\n\n<em>\/**\n  * @brief Simple uart input handler\n  * @retval None\n  *\/<\/em>\nvoid handleUartInput(UARTCommandTypeDef cmd)\n{\n    switch(cmd)\n    {\n        case UART_RX_0:\n        {\n            <em>\/\/ 0<\/em>\n            uart_buf_len = sprintf(uart_tx_buf, \"\\r\\n(0 pressed)\\r\\n\");\n            HAL_UART_Transmit(&amp;huart3, (uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);\n            if(isBleuIOReady)\n            {\n                writeToDongle((uint8_t*)DONGLE_CMD_ATI);\n            } else\n            {\n                uart_buf_len = sprintf(uart_tx_buf, BLEUIO_NOT_READY_MSG);\n                HAL_UART_Transmit(&amp;huart3, (uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);\n            }\n            uartStatus = UART_RX_NONE;\n            break;\n        }\n        case UART_RX_1:\n        {\n            <em>\/\/ 1<\/em>\n            uart_buf_len = sprintf(uart_tx_buf, \"\\r\\n(1 pressed)\\r\\n\");\n            HAL_UART_Transmit(&amp;huart3, (uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);\n            if(isBleuIOReady)\n            {\n                writeToDongle((uint8_t*)DONGLE_CMD_AT_ADVSTART);\n            } else\n            {\n                uart_buf_len = sprintf(uart_tx_buf, BLEUIO_NOT_READY_MSG);\n                HAL_UART_Transmit(&amp;huart3, (uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);\n            }\n            uartStatus = UART_RX_NONE;\n            break;\n        }\n        case UART_RX_2:\n        {\n            <em>\/\/ 2<\/em>\n            uart_buf_len = sprintf(uart_tx_buf, \"\\r\\n(2 pressed)\\r\\n\");\n            HAL_UART_Transmit(&amp;huart3, (uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);\n            if(isBleuIOReady)\n            {\n                writeToDongle((uint8_t*)DONGLE_CMD_AT_ADVSTOP);\n            } else\n            {\n                uart_buf_len = sprintf(uart_tx_buf, BLEUIO_NOT_READY_MSG);\n                HAL_UART_Transmit(&amp;huart3, (uint8_t *)uart_tx_buf, uart_buf_len, HAL_MAX_DELAY);\n            }\n            uartStatus = UART_RX_NONE;\n            break;\n        }\n        case UART_RX_NONE:\n        {\n            break;\n        }\n        default:\n        {\n            uartStatus = UART_RX_NONE;\n            break;\n        }\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>The handleUartInput() handles the inputs 0, 1 and 2 and maps each to a certain Dongle commands. The handler is then put inside the main loop.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  <em>\/* Infinite loop *\/<\/em>\n  <em>\/* USER CODE BEGIN WHILE *\/<\/em>\n  while (1)\n  {\n    <em>\/* USER CODE END WHILE *\/<\/em>\n    MX_USB_HOST_Process();\n    <em>\/* USER CODE BEGIN 3 *\/<\/em>\n    <em>\/\/ Simple handler for uart input<\/em>\n    handleUartInput(uartStatus);\n  }\n  <em>\/* USER CODE END 3 *\/<\/em>\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/www.bleuio.com\/getting_started\/docs\/stm32_example\/#3-using-the-example-project\"><\/a>3. Using the example project<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.bleuio.com\/getting_started\/docs\/stm32_example\/#31-what-you-will-need\"><\/a>3.1 What you will need<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>A BleuIO dongle (<a href=\"https:\/\/www.bleuio.com\/\">https:\/\/www.bleuio.com\/<\/a>)<\/li><li>A board with a STM32 Microcontroller with a USB port. (A Nucleo-144 development board: NUCLEO-H743ZI2, was used developing this example. (<a href=\"https:\/\/www.st.com\/en\/evaluation-tools\/nucleo-h743zi.html\">https:\/\/www.st.com\/en\/evaluation-tools\/nucleo-h743zi.html<\/a>)<br>To connect the dongle to the Nucleo board a \u201cUSB A to Micro USB B\u201d-cable with a USB A female-to-female adapter can be used.)<br><br><img decoding=\"async\" src=\"https:\/\/www.bleuio.com\/getting_started\/img\/stm32_img\/stm32_bleuio.jpg\" alt=\"alt text\"><\/li><li>STM32CubeIDE (<a href=\"https:\/\/www.st.com\/en\/development-tools\/stm32cubeide.html\">https:\/\/www.st.com\/en\/development-tools\/stm32cubeide.html<\/a>)<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/www.bleuio.com\/getting_started\/docs\/stm32_example\/#4-how-to-setup-project\"><\/a>4. How to setup project<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.bleuio.com\/getting_started\/docs\/stm32_example\/#41-downloading-the-project-from-github\"><\/a>4.1 Downloading the project from GitHub<\/h3>\n\n\n\n<p><strong>Get project&nbsp;<a href=\"https:\/\/github.com\/smart-sensor-devices-ab\/stm32_bleuio_example\">HERE<\/a><\/strong><br><a href=\"https:\/\/github.com\/smart-sensor-devices-ab\/stm32_bleuio_example\">https:\/\/github.com\/smart-sensor-devices-ab\/stm32_bleuio_example<\/a><br><br>Either clone the project, or download it as a zip file and unzip it, into your STM32CubeIDE workspace.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.bleuio.com\/getting_started\/docs\/stm32_example\/#42-importing-as-an-existing-project\"><\/a>4.2 Importing as an Existing Project<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>From STM32CubeIDE choose File&gt;Import\u2026<br><img decoding=\"async\" src=\"https:\/\/www.bleuio.com\/getting_started\/img\/stm32_img\/import.png\" alt=\"alt text\"><\/li><li>Then choose General&gt;Existing Projects into Workspace then click \u2018Next &gt;\u2019<br><img decoding=\"async\" src=\"https:\/\/www.bleuio.com\/getting_started\/img\/stm32_img\/existing_projects.png\" alt=\"alt text\"><\/li><li>Make sure you\u2019ve choosen your workspace in \u2018Select root directory:\u2019<\/li><li>You should see the project \u201cstm32_bleuio_example\u201d, check it and click \u2018Finish\u2019.<br><img decoding=\"async\" src=\"https:\/\/www.bleuio.com\/getting_started\/img\/stm32_img\/import_projects.png\" alt=\"alt text\"><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/www.bleuio.com\/getting_started\/docs\/stm32_example\/#5-running-the-example\"><\/a>5. Running the example<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>In STMCubeIDE click the hammer icon to build the project.<\/li><li>Open up the \u2018STMicroelectronics STLink Virtual COM Port\u2019 with a serial terminal emulation program like TeraTerm, Putty or CoolTerm.Serial port Setup:<br>Baudrate: 115200<br>Data Bits: 8<br>Parity: None<br>Stop Bits: 1<br>Flow Control: None<\/li><li>In STMCubeIDE click the green play button to flash and run it on your board. The first time you click it the \u2018Run Configuration\u2019 window will appear. You can just leave it as is and click run.<\/li><li>Connect the BleuIO Dongle.<\/li><li>Wait until the message: \u201c[BleuIO Dongle Ready]\u201d is shown.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.bleuio.com\/getting_started\/img\/stm32_img\/Welcome.png\" alt=\"Welcome!\"\/><\/figure>\n\n\n\n<p>\u2013 Press 0 to get device information:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.bleuio.com\/getting_started\/img\/stm32_img\/ATI.png\" alt=\"Welcome!\"\/><\/figure>\n\n\n\n<p>\u2013 Press 1 to start advertising:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.bleuio.com\/getting_started\/img\/stm32_img\/ADVSTART.png\" alt=\"Welcome!\"\/><\/figure>\n\n\n\n<p>\u2013 Press 2 to stop advertising:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.bleuio.com\/getting_started\/img\/stm32_img\/ADVSTOP.png\" alt=\"Welcome!\"\/><\/figure>\n\n\n\n<p><br>BlueIO dongle responses will be printed out to Virtual COM Port.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Introduction The project is a simple example showcasing a quick way to set up a STM32Cube project as a USB CDC Host capable of communicating with the BleuIO Dongle. When a BleuIO Dongle is connected to the Nucleo boards USB port the STM32 will recognize it. It will then accept 3 different inputs from [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":108,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,2],"tags":[],"class_list":["post-107","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bleuio","category-bleuio-tutorial"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Create BLE project with STM32 and BleuIO - BleuIO - Create Bluetooth Low Energy application<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create BLE project with STM32 and BleuIO - BleuIO - Create Bluetooth Low Energy application\" \/>\n<meta property=\"og:description\" content=\"1. Introduction The project is a simple example showcasing a quick way to set up a STM32Cube project as a USB CDC Host capable of communicating with the BleuIO Dongle. When a BleuIO Dongle is connected to the Nucleo boards USB port the STM32 will recognize it. It will then accept 3 different inputs from [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/\" \/>\n<meta property=\"og:site_name\" content=\"BleuIO - Create Bluetooth Low Energy application\" \/>\n<meta property=\"article:published_time\" content=\"2021-11-16T14:25:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-01T10:38:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/01\/stm32_bleuio_example.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"569\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"BleuIO\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/create-ble-project-with-stm32-and-bleuio\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/create-ble-project-with-stm32-and-bleuio\\\/\"},\"author\":{\"name\":\"BleuIO\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\"},\"headline\":\"Create BLE project with STM32 and BleuIO\",\"datePublished\":\"2021-11-16T14:25:41+00:00\",\"dateModified\":\"2022-07-01T10:38:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/create-ble-project-with-stm32-and-bleuio\\\/\"},\"wordCount\":737,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/create-ble-project-with-stm32-and-bleuio\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/stm32_bleuio_example.jpg\",\"articleSection\":[\"BleuIO\",\"BleuIO tutorial\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/create-ble-project-with-stm32-and-bleuio\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/create-ble-project-with-stm32-and-bleuio\\\/\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/create-ble-project-with-stm32-and-bleuio\\\/\",\"name\":\"Create BLE project with STM32 and BleuIO - BleuIO - Create Bluetooth Low Energy application\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/create-ble-project-with-stm32-and-bleuio\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/create-ble-project-with-stm32-and-bleuio\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/stm32_bleuio_example.jpg\",\"datePublished\":\"2021-11-16T14:25:41+00:00\",\"dateModified\":\"2022-07-01T10:38:53+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/create-ble-project-with-stm32-and-bleuio\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/create-ble-project-with-stm32-and-bleuio\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/create-ble-project-with-stm32-and-bleuio\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/stm32_bleuio_example.jpg\",\"contentUrl\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/01\\\/stm32_bleuio_example.jpg\",\"width\":1000,\"height\":569,\"caption\":\"Create BLE project with STM32\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/create-ble-project-with-stm32-and-bleuio\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create BLE project with STM32 and BleuIO\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/\",\"name\":\"BleuIO - Create Bluetooth Low Energy application\",\"description\":\"Learn Bluetooth Low Energy programming and build Bluetooth Low Energy Application\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/#\\\/schema\\\/person\\\/89bc581382d5964043f96efc54b75b80\",\"name\":\"BleuIO\",\"sameAs\":[\"https:\\\/\\\/www.bleuio.com\\\/blog\"],\"url\":\"https:\\\/\\\/www.bleuio.com\\\/blog\\\/author\\\/biadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Create BLE project with STM32 and BleuIO - BleuIO - Create Bluetooth Low Energy application","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/","og_locale":"en_US","og_type":"article","og_title":"Create BLE project with STM32 and BleuIO - BleuIO - Create Bluetooth Low Energy application","og_description":"1. Introduction The project is a simple example showcasing a quick way to set up a STM32Cube project as a USB CDC Host capable of communicating with the BleuIO Dongle. When a BleuIO Dongle is connected to the Nucleo boards USB port the STM32 will recognize it. It will then accept 3 different inputs from [&hellip;]","og_url":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/","og_site_name":"BleuIO - Create Bluetooth Low Energy application","article_published_time":"2021-11-16T14:25:41+00:00","article_modified_time":"2022-07-01T10:38:53+00:00","og_image":[{"width":1000,"height":569,"url":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/01\/stm32_bleuio_example.jpg","type":"image\/jpeg"}],"author":"BleuIO","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/#article","isPartOf":{"@id":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/"},"author":{"name":"BleuIO","@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80"},"headline":"Create BLE project with STM32 and BleuIO","datePublished":"2021-11-16T14:25:41+00:00","dateModified":"2022-07-01T10:38:53+00:00","mainEntityOfPage":{"@id":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/"},"wordCount":737,"commentCount":0,"image":{"@id":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/01\/stm32_bleuio_example.jpg","articleSection":["BleuIO","BleuIO tutorial"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/","url":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/","name":"Create BLE project with STM32 and BleuIO - BleuIO - Create Bluetooth Low Energy application","isPartOf":{"@id":"https:\/\/www.bleuio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/#primaryimage"},"image":{"@id":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/01\/stm32_bleuio_example.jpg","datePublished":"2021-11-16T14:25:41+00:00","dateModified":"2022-07-01T10:38:53+00:00","author":{"@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80"},"breadcrumb":{"@id":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/#primaryimage","url":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/01\/stm32_bleuio_example.jpg","contentUrl":"https:\/\/www.bleuio.com\/blog\/wp-content\/uploads\/2022\/01\/stm32_bleuio_example.jpg","width":1000,"height":569,"caption":"Create BLE project with STM32"},{"@type":"BreadcrumbList","@id":"https:\/\/www.bleuio.com\/blog\/create-ble-project-with-stm32-and-bleuio\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.bleuio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Create BLE project with STM32 and BleuIO"}]},{"@type":"WebSite","@id":"https:\/\/www.bleuio.com\/blog\/#website","url":"https:\/\/www.bleuio.com\/blog\/","name":"BleuIO - Create Bluetooth Low Energy application","description":"Learn Bluetooth Low Energy programming and build Bluetooth Low Energy Application","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.bleuio.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.bleuio.com\/blog\/#\/schema\/person\/89bc581382d5964043f96efc54b75b80","name":"BleuIO","sameAs":["https:\/\/www.bleuio.com\/blog"],"url":"https:\/\/www.bleuio.com\/blog\/author\/biadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/comments?post=107"}],"version-history":[{"count":1,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/107\/revisions"}],"predecessor-version":[{"id":109,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/posts\/107\/revisions\/109"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/media\/108"}],"wp:attachment":[{"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/media?parent=107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/categories?post=107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bleuio.com\/blog\/wp-json\/wp\/v2\/tags?post=107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}