CH32V208系列是基于32位RISC-V设计的无线型微控制器,配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度。搭载V4C内核,加入内存保护单元,同时降低硬件除法周期。片上集成2Mbps低功耗蓝牙BLE 通讯模块。
驱动蓝牙,控制板的载的LED灯的亮与灭。
CH32V208开发板
带蓝牙的手机
BLE调试助手
MounRiver Studio
CH32V20xEVT\EVT\EXAM\BLE\Periphera示例
1、打开perphera示例。
2、增加LED初始化,初始化GPIO8为控制IO,并把PA8连到LED1上。代码如下:
/*********************************************************************
* @fn GPIO_Toggle_INIT
*
* [url=home.php?mod=space&uid=2666770]@Brief[/url] Initializes GPIOA.0
*
* [url=home.php?mod=space&uid=1141835]@Return[/url] none
*/
void GPIO_Toggle_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
把这个函数添加到periphera_main.c前面。并在把他加入到初始化函数中:
void Main_Circulation(void)
{
GPIO_Toggle_INIT();
while(1)
{
TMOS_SystemProcess();
}
}
2、在ble接收任务函数中增加接收字符的判断。ble任务处理在peripheral.c中,我们修改例程中的simpleProfileChangeCB函数
代码如下:
static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len)
{
switch(paramID)
{
case SIMPLEPROFILE_CHAR1:
{
uint8_t newValue[SIMPLEPROFILE_CHAR1_LEN];
tmos_memcpy(newValue, pValue, len);
PRINT("profile ChangeCB CHAR1.. %s\r\n",pValue);
if (pValue[0] == 48) {
PRINT("OPEN LED.. \n");
GPIO_WriteBit(GPIOA, GPIO_Pin_8,Bit_SET);
}
else {
PRINT("CLOSE LED.. \n");
GPIO_WriteBit(GPIOA, GPIO_Pin_8,Bit_RESET);
}
break;
}
case SIMPLEPROFILE_CHAR3:
{
uint8_t newValue[SIMPLEPROFILE_CHAR3_LEN];
tmos_memcpy(newValue, pValue, len);
PRINT("profile ChangeCB CHAR3..\n");
break;
}
default:
// should not reach here!
break;
}
}
到此代码修改就结束了。编下载到开发板。打开BLE调试助手。
在蓝牙调式助手上我们看到的Simple Peripheral的蓝牙设备,我们点CONNECT进去:
我们发送数据后,开发板从串口打印出日志,并实现了LED灯的亮与灭。
在官方提供的例程上与手机的数据交互非常简单、方便。
更多回帖