在前面的帖子中完成了STM32WBA55CG开发板对液晶屏和DDS芯片AD9834的驱动,本帖在ST官方蓝牙应用demo BLE_p2pServer的基础上加入上述驱动,从而实现蓝牙控制的DDS。
BLE_p2pServer示例包含stm32cubemx配置,直接在此基础上进行修改十分方便,对蓝牙不是很了解的情况下从零创建蓝牙应用容易出错,ST的这款工具简直是小白的福音。
首先开启SPI接口:
系统时钟配置为100MHz,默认的是16MHz
增加AD9834的配置管脚:
在函数
void P2P_SERVER_Notification(P2P_SERVER_NotificationEvt_t *p_Notification)
中加入接收蓝牙数据的处理
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 */ if(p_Notification->DataTransfered.p_Payload[0] == 0x01) { BSP_LED_On(LED_BLUE); LOG_INFO_APP("-- P2P APPLICATION SERVE: sine wave\n"); P2P_SERVER_APP_Context.LedControl.Led1 = 0x01; /* LED1 ON */ AD9834_Select_Wave(Sine_Wave); } if(p_Notification->DataTransfered.p_Payload[0] == 0x00) { BSP_LED_Off(LED_BLUE); LOG_INFO_APP("-- P2P APPLICATION SERVER : triangular wave\n"); P2P_SERVER_APP_Context.LedControl.Led1 = 0x00; /* LED1 OFF */ AD9834_Select_Wave(Triangle_Wave); } if(p_Notification->DataTransfered.p_Payload[0] == 0x02) { BSP_LED_Off(LED_BLUE); LOG_INFO_APP("-- P2P APPLICATION SERVER : square wave\n"); //P2P_SERVER_APP_Context.LedControl.Led1 = 0x00; /* LED1 OFF */ AD9834_Select_Wave(Square_Wave); } /* 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; }
根据接收的不同命令。驱动AD9834产生不同的波形
蓝牙上位机使用的是开源软件EFR Connect
视频分享
代码分享