这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【STM32WBA55CG开发板】DIY一台四驱载重小车代码部分解析

共3条 1/1 1 跳转至

【STM32WBA55CG开发板】DIY一台四驱载重小车代码部分解析

菜鸟
2024-12-25 00:49:34     打赏

1、STM32 WBA55CG部分的代码

这里要感谢老师教程的分享,对于我这种完全没有用过STM32 的人,可以完成到目前的进度很难得。再次感谢老师的教程。

另外,电机的控制由于减速电机是可以调速的,但是由于需要驱动大电流,本人并没有很多的经验可以驱动起这个电机,然后就是,这个板子的IO我不敢随便接,所以,这里选择了驱动继电器来完成前进后退的.整个代码的完成还要感谢群里同学们的指导,感谢王哥的指导。

1.1 关于Keil和Cuba MX的环境搭建我就不重复赘述了。

1.2 再sdk的路径下有很多demo,我们以这个为基础做修改  

D:\STM32\en.stm32cubewba-v1-5-0\STM32Cube_FW_WBA_V1.5.0\Projects\NUCLEO-WBA55CG\Applications\BLE,

这里选择BLE_p2pServer作为基础工程复制一份改名为BLE_p2peepw

image.png

修改PA7、PA6的引脚为GPIO输出

image.png

image.png

设置完成以后,电机右上角的生成代码,选择MDK-ARM

用keil打开这个工程的MDK工程


/**
  * @brief GPIO Initialization Function
  * @param None
  * @retval None
  */
void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7|GPIO_PIN_6, GPIO_PIN_RESET);

  /*Configure GPIO pins : PA7 PA6 */
  GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_6;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /*RT DEBUG GPIO_Init */
  RT_DEBUG_GPIO_Init();

/* USER CODE BEGIN MX_GPIO_Init_2 */

/* USER CODE END MX_GPIO_Init_2 */
}

GPIO 初始化的这个方法已经完成初始化的功能

在main.h 定义一下高低电平的方法


// 宏定义,简化 GPIO 操作
#define SET_PA7_HIGH() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET)
#define SET_PA6_HIGH() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET)
#define SET_PA7_LOW() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET)
#define SET_PA6_LOW() HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET)


如果需要控制PA7或者PA6高低电平,简单的调用这个方法可以(好像c语言不叫调用方法,不管了)。

SET_PA7_LOW()
SET_PA7_HIGH()

然后是蓝牙部分的功能

他原本的示例是接受0x00是关闭LD1,接受0x01是打开LD1,我在这个基础上改一下

0x04是前进

0x05是暂停

0x06是后退

/* Functions Definition ------------------------------------------------------*/
void P2P_SERVER_Notification(P2P_SERVER_NotificationEvt_t *p_Notification)
{
  /* USER CODE BEGIN Service1_Notification_1 */

  /* USER CODE END Service1_Notification_1 */
  switch(p_Notification->EvtOpcode)
  {
    /* USER CODE BEGIN Service1_Notification_Service1_EvtOpcode */

    /* USER CODE END Service1_Notification_Service1_EvtOpcode */

    case P2P_SERVER_LED_C_READ_EVT:
      /* USER CODE BEGIN Service1Char1_READ_EVT */

      /* USER CODE END Service1Char1_READ_EVT */
      break;

    case P2P_SERVER_LED_C_WRITE_NO_RESP_EVT:
      /* USER CODE BEGIN Service1Char1_WRITE_NO_RESP_EVT */
			
		for (uint16_t i = 0; i < p_Notification->DataTransfered.Length; i++) {
    LOG_INFO_APP("-- P2P APPLICATION SERVER : Received Data[%d] = 0x%02X\n", i, p_Notification->DataTransfered.p_Payload[i]);
}
      if(p_Notification->DataTransfered.p_Payload[1] == 0x04)
			{
				LOG_INFO_APP("-- P2P APPLICATION SERVER : 6666\n");
				// 设置 PA7 和 PA6 为高电平
    SET_PA7_HIGH();
    SET_PA6_LOW();
			}

			 if(p_Notification->DataTransfered.p_Payload[1] == 0x05)
			{
				LOG_INFO_APP("-- P2P APPLICATION SERVER : 6666\n");
				// 设置 PA7 和 PA6 为高电平
    SET_PA7_HIGH();
    SET_PA6_HIGH();
			}
			
			if(p_Notification->DataTransfered.p_Payload[1] == 0x06)
			{
				LOG_INFO_APP("-- P2P APPLICATION SERVER : 6666\n");
				// 设置 PA7 和 PA6 为高电平
    SET_PA7_LOW();
    SET_PA6_LOW();
			}
      if(p_Notification->DataTransfered.p_Payload[1] == 0x01)
      {
        BSP_LED_On(LED_BLUE);
        LOG_INFO_APP("-- P2P APPLICATION SERVER : LED1 ON\n");
        P2P_SERVER_APP_Context.LedControl.Led1 = 0x01; /* LED1 ON */
				uint8_t led_data[2] = {0xAA, 0xAA};
P2P_SERVER_Data_t pData = { .p_Payload = led_data, .Length = sizeof(led_data) };

// 更新 LED 控制特征的值
P2P_SERVER_UpdateValue(P2P_SERVER_LED_C, &pData);

      }
      if(p_Notification->DataTransfered.p_Payload[1] == 0x00)
      {
        BSP_LED_Off(LED_BLUE);
        LOG_INFO_APP("-- P2P APPLICATION SERVER : LED1 OFF\n");
        P2P_SERVER_APP_Context.LedControl.Led1 = 0x00; /* LED1 OFF */
      }
      /* USER CODE END Service1Char1_WRITE_NO_RESP_EVT */
      break;

    case P2P_SERVER_SWITCH_C_NOTIFY_ENABLED_EVT:
      /* USER CODE BEGIN Service1Char2_NOTIFY_ENABLED_EVT */
      P2P_SERVER_APP_Context.Switch_c_Notification_Status = Switch_c_NOTIFICATION_ON;
      LOG_INFO_APP("-- P2P APPLICATION SERVER : NOTIFICATION ENABLED\n");
      LOG_INFO_APP(" \n\r");
      /* USER CODE END Service1Char2_NOTIFY_ENABLED_EVT */
      break;

    case P2P_SERVER_SWITCH_C_NOTIFY_DISABLED_EVT:
      /* USER CODE BEGIN Service1Char2_NOTIFY_DISABLED_EVT */
      P2P_SERVER_APP_Context.Switch_c_Notification_Status = Switch_c_NOTIFICATION_OFF;
      LOG_INFO_APP("-- P2P APPLICATION SERVER : NOTIFICATION DISABLED\n");
      LOG_INFO_APP(" \n\r");
      /* USER CODE END Service1Char2_NOTIFY_DISABLED_EVT */
      break;

    default:
      /* USER CODE BEGIN Service1_Notification_default */

      /* USER CODE END Service1_Notification_default */
      break;
  }
  /* USER CODE BEGIN Service1_Notification_2 */

  /* USER CODE END Service1_Notification_2 */
  return;
}


附件代码 BLE_p2peepw.zip

到这里WBA55CG部分的代码就介绍完了。

2、电机的接线。

image.png

这个电机可以控制正反转,

注意,小车的电机,必须是一个正转一个反转,不然就是相反转动,这个车子是不会走的。

我这里使用了2个继电器,一个控制正反转,一个控制转动,PA7控制的是小车转动,PA6控制的是正反转,2个橙线接在常开,另外两个接在常闭。

所以PA7必须是高电平,小车开始转动,PA6可以随意,不管是高电平还是低电平,他都会往一个方向运动。

3、微信小程序部分代码

3.1 首先你需要下载微信开发者工具,当然如果你要用uniapp也可以完成这个任务,老师用的是原生微信小程序,那么就按照老师的步骤做。

image.png

我对界面的按钮做了一点优化。

这是以前做的配网程序,有上架到微信,就在这里面加一下小车控制的功能,就不单独做了。

这里注明一下,你在app.json里面新增文件路径,按ctrl s,会自动创建项目文件。

image.png

image.png

 js是主要逻辑代码的文件

json是一些配置文件,例如title可以在这里设置。

wxml是界面文件

wxss是样式文件

(论坛的编辑器把代码跑掉了,我还是截图吧)

<button bindtap="openBluetoothAdapter" plain="true" type="primary">开始扫描</button><label class="top1"></label><button bindtap="stopBluetoothDevicesDiscovery" plain="true" type="primary">停止扫描</button><label class="top1"></label><button bindtap="closeBluetoothAdapter" plain="true" type="primary" >结束流程</button>

image.png

image.png

按钮加个tpye,就可以好看很多了,嘿嘿

表单组件 / button  参考微信表单的页面

这部分的代码是直接从老师的代码里面复制的

点击开始扫描以后,会发现wba55cg的蓝牙

image.png

老师这里用的createBLEConnection  方法作为点击外围设备按钮的方法

image.png

他这里把这一页拿到的参数跳到下一页。

image.png

这一页的代码就是我自己写的了,也参照了老师的部分功能。

image.png

他这里这一页会显示特征值、uuid等信息。

image.png

我加了三个按钮,但是由于三个按钮就计一起,中间使用一个label做隔开,top做了10px

image.png

image.png

下面是三个按钮的方法

image.png

经过测试,蓝牙发送的数据一切正确

image.png

下面可以微信扫描下面的小程序,选择只能小车来控制。

智能小车控制功能0x04,控制小车前进0x05,控制小车后退0x06,控制小车暂停

如果要上架,要更新微信的协议,在小程序后台。

image.png

这里必须更新才可以驱动蓝牙。这是上架的程序的的硬性规定。

8830630f81bb13cd9b567ded83f83b6.jpg

下面是微信部分的代码,整个的配网程序是TCP配网,和这个项目无关,我只留小车部分的代码,有兴趣的可以复制到自己的工程中去实验。

微信小程序minicar.zip
















关键词: STM32WBA55CG     开发     四驱     小车     微信小    

高工
2024-12-25 09:31:52     打赏
2楼

感谢分享


菜鸟
2024-12-25 10:32:59     打赏
3楼

感谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]