简介
在前几个章节中我们完成了,蓝牙台灯的基础任务相关,即使用ADC采集电池电量和使用PWM来控制灯的亮度。不过项目是属于独立的功能模块,在这个章节中我们将两个工程组合在一起。 同时演示蓝牙调试助手的使用。那么在下一个章节,我们将展示最终的成品效果。
我们可以直接在ADC的工程上修改。
1 - 首先配置定时器
/* TIM2 init function */ void MX_TIM2_Init(void) { /* USER CODE BEGIN TIM2_Init 0 */ /* USER CODE END TIM2_Init 0 */ TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; /* USER CODE BEGIN TIM2_Init 1 */ /* USER CODE END TIM2_Init 1 */ htim2.Instance = TIM2; htim2.Init.Prescaler = 80-1; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 9999; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 5000; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM2_Init 2 */ /* USER CODE END TIM2_Init 2 */ HAL_TIM_MspPostInit(&htim2); }
2- 使能输出
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, 1000); // 设置占空比 HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4); // 启动PWM输出
现象
虽然上述的程序中ADC还是在主程序中运行的,但是由于时间较短,并没有影响到蓝牙协议的运行
蓝牙调试助手的使用
1- 在应用商店搜索ST ble toolbox并且下载
2- 烧录程序后打开软件搜索蓝牙并且连接。
3-P2P-server 处通过蓝牙来控制板载LED闪烁。
4 - 代码分析
代码的控制部分在STM32WPAN的APP下的P2P_server_app.c 中,我们可以在这个地方定义不同的命令来控制PWM的占空比。