[RISC-V MCU 创新应用比赛] 蓝牙控制波形发生器

[复制链接]
 楼主| 北方西门吹雪 发表于 2021-9-30 16:41 | 显示全部楼层 |阅读模式
本帖最后由 北方西门吹雪 于 2021-9-30 16:42 编辑

1. 概述
蓝牙控制波形发生器实现通过蓝牙控制波形选择,使用低功耗蓝牙 RISC-V MCU CH573 评估板实现方波发生器的项目。

2. 使用的硬件
低功耗蓝牙 RISC-V MCU CH573 评估板
智能手机
MounRiver Studio(MRS) IDE
WCHISTOOL进行固件下载

3. 开发过程
3.1 创建项目,基于BLE peripheral项目创建,启动MounRiver IDE
560486155752e944b1.png
3.2 主文件是一个loop(), 具体的实现使用WCH的私有TMS实时系统实现,代码如下

  1. #include "CONFIG.h"
  2. #include "CH57x_common.h"
  3. #include "HAL.h"
  4. #include "gattprofile.h"
  5. #include "peripheral.h"

  6. /*********************************************************************
  7. * GLOBAL TYPEDEFS
  8. */
  9. __attribute__((aligned(4))) u32 MEM_BUF[BLE_MEMHEAP_SIZE/4];

  10. #if (defined (BLE_MAC)) && (BLE_MAC == TRUE)
  11. u8C MacAddr[6] = {0x84,0xC2,0xE4,0x03,0x02,0x02};
  12. #endif

  13. /*******************************************************************************
  14. * Function Name  : Main_Circulation
  15. * Description    : 主循环
  16. * Input          : None
  17. * Output         : None
  18. * Return         : None
  19. *******************************************************************************/
  20. __attribute__((section(".highcode")))
  21. void Main_Circulation()
  22. {
  23.   while(1){
  24.     TMOS_SystemProcess( );
  25.   }
  26. }

  27. /*******************************************************************************
  28. * Function Name  : main
  29. * Description    : 主函数
  30. * Input          : None
  31. * Output         : None
  32. * Return         : None
  33. *******************************************************************************/
  34. int main( void )
  35. {
  36. #if (defined (DCDC_ENABLE)) && (DCDC_ENABLE == TRUE)
  37.   PWR_DCDCCfg( ENABLE );
  38. #endif
  39.   SetSysClock( CLK_SOURCE_PLL_60MHz );
  40. #if (defined (HAL_SLEEP)) && (HAL_SLEEP == TRUE)
  41.   GPIOA_ModeCfg( GPIO_Pin_All, GPIO_ModeIN_PU );
  42.   GPIOB_ModeCfg( GPIO_Pin_All, GPIO_ModeIN_PU );
  43. #endif
  44. #ifdef DEBUG
  45.   GPIOA_SetBits(bTXD1);
  46.   GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);
  47.   UART1_DefInit( );
  48. #endif   
  49.   PRINT("%s\n",VER_LIB);
  50.   CH57X_BLEInit( );
  51.         HAL_Init( );
  52.         GAPRole_PeripheralInit( );
  53.         Peripheral_Init( );
  54.   Main_Circulation();
  55. }
3.3 主要代码在peripheral.c中实现。
示例代码是主循环如下,更改实现PWM功能的入口就在这个代码中,随后修改

  1. uint16 Peripheral_ProcessEvent( uint8 task_id, uint16 events )
  2. {

  3. //  VOID task_id; // TMOS required parameter that isn't used in this function

  4.   if ( events & SYS_EVENT_MSG ){
  5.     uint8 *pMsg;

  6.     if ( (pMsg = tmos_msg_receive( Peripheral_TaskID )) != NULL ){
  7.       Peripheral_ProcessTMOSMsg( (tmos_event_hdr_t *)pMsg );
  8.       // Release the TMOS message
  9.       tmos_msg_deallocate( pMsg );
  10.     }
  11.     // return unprocessed events
  12.     return (events ^ SYS_EVENT_MSG);
  13.   }

  14.   if ( events & SBP_START_DEVICE_EVT ){
  15.         // Start the Device
  16.     GAPRole_PeripheralStartDevice( Peripheral_TaskID, &Peripheral_BondMgrCBs, &Peripheral_PeripheralCBs );
  17.     return ( events ^ SBP_START_DEVICE_EVT );
  18.   }

  19.   if ( events & SBP_PERIODIC_EVT )
  20.   {
  21.    // Restart timer
  22.     if ( SBP_PERIODIC_EVT_PERIOD ){
  23.       tmos_start_task( Peripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );
  24.     }
  25.     // Perform periodic application task
  26.     performPeriodicTask();
  27.     return (events ^ SBP_PERIODIC_EVT);
  28.   }
  29.   
  30.   if ( events & SBP_PARAM_UPDATE_EVT )
  31.   {
  32.     // Send connect param update request
  33.     GAPRole_PeripheralConnParamUpdateReq( peripheralConnList.connHandle,
  34.                                           DEFAULT_DESIRED_MIN_CONN_INTERVAL,
  35.                                           DEFAULT_DESIRED_MAX_CONN_INTERVAL,
  36.                                           DEFAULT_DESIRED_SLAVE_LATENCY,
  37.                                           DEFAULT_DESIRED_CONN_TIMEOUT,
  38.                                           Peripheral_TaskID);
  39.    
  40.     return (events ^ SBP_PARAM_UPDATE_EVT);
  41.   }
  42.   
  43.   if ( events & SBP_READ_RSSI_EVT )
  44.   {
  45.     GAPRole_ReadRssiCmd(peripheralConnList.connHandle);
  46.     tmos_start_task( Peripheral_TaskID, SBP_READ_RSSI_EVT, SBP_READ_RSSI_EVT_PERIOD );      
  47.     return (events ^ SBP_READ_RSSI_EVT);
  48.   }   

  49.   // Discard unknown events
  50.   return 0;
  51. }
编译并下载
67745615576d5653f8.png
编译成功
76261615576eb5bed7.png
按着download上电,才能显示USB下载连接成功
7620661557747cc956.png
点击下载就成功
2140161557777d1272.png
4. 手机app连接
成功连接到手机,并可以进行数据交换和控制。其中手机是center,CH573为外围peripheral。
1755357844.jpg

zerorobert 发表于 2022-11-5 10:45 | 显示全部楼层
最大的传输速度是多少?              
modesty3jonah 发表于 2022-11-5 10:54 | 显示全部楼层
这个波形在哪里显示的?              
kmzuaz 发表于 2022-11-5 11:13 | 显示全部楼层
可以做成oled或者lcd显示数据的吗?
robincotton 发表于 2022-11-5 11:43 | 显示全部楼层
有完整的设计方案吗?可以显示波形和数据的。
pixhw 发表于 2022-11-5 14:12 | 显示全部楼层
CH573 自带有DAC吗?如何控制CH573 ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

120

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

40

主题

120

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部