以此记录学习cubemx过程,看的b站keysking的视频,不建议初学者照着学啊,我也写不出原理啥的,要是看的keysking视频,用的也是最小系统板以及mx不是ide但没实现的,可以对照着看一下。
一、配置cubemx
1、sys
2、RCC(习惯、不配好像没啥事,我也没改旁边HCLK配置)
3、GPIO:我选了红灯、绿灯、蓝灯,配置这些引脚为输出模式,右键添加标签,方便后续编写程序
4、USART3,开异步模式,改波特率默认为9600
5、开启USART3的中断NVIC
6、开启USART3的DMA
7、生成文件
写程序,主要目的是实现蓝牙能发送接收数据,再写个简易数据包,能同时控制三个小灯的亮灭
main.c
/* USER CODE BEGIN 0 */
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
if(huart == &huart3){
HAL_UART_Transmit_DMA(&huart3,receivedata,Size);
if (receivedata[0] == 0xAA){
if(receivedata[1] == Size){
uint8_t sum = 0;
for(int i=0;i<Size-1;i++){
sum+=receivedata[i];
}
if(sum == receivedata[Size-1]){
for(int i=2;i<Size-1;i+=2){
GPIO_PinState state = GPIO_PIN_SET ; //ÓÃÀ´±íʾGPIO¸ßµÍµçƽµÄ±äÁ¿ÀàÐÍ
if(receivedata[i+1] == 0x00)
state = GPIO_PIN_RESET;
if(receivedata[i] == 0x01)
HAL_GPIO_WritePin(RLED_GPIO_Port,RLED_Pin,state); //ºìµÆÁÁ£¬·¢ËÍAA 05 01 FF AF(×îºóһλAFÊÇǰËùÓÐÖ®ºÍ£¬È¡×îºóÒ»×Ö½Ú)
else if(receivedata[i] == 0x02)
HAL_GPIO_WritePin(GLED_GPIO_Port,GLED_Pin,state);
else if(receivedata[i] == 0x03)
HAL_GPIO_WritePin(BLED_GPIO_Port,BLED_Pin,state);
}
}
}
}
HAL_UARTEx_ReceiveToIdle_DMA(&huart3,receivedata,sizeof(receivedata));
__HAL_DMA_DISABLE_IT(&hdma_usart3_rx,DMA_IT_HT);
}
}
/* USER CODE END 0 */
/* USER CODE BEGIN 2 */
HAL_UARTEx_ReceiveToIdle_DMA(&huart3,receivedata,sizeof(receivedata));
__HAL_DMA_DISABLE_IT(&hdma_usart3_rx,DMA_IT_HT);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}