在前面的帖子中完成了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

视频分享
代码分享
我要赚赏金
