手把手教学!4.5块stm32f103c6t6蓝牙智能车

stm32f103c6t6蓝牙车,从硬件设计到代码编写手把手教学,附源码

文章目录

前言

一、stm32cubemx配置

二、fusion360(工业设计)

三、立创EDA(硬件设计)

四、控制算法(源代码)

1.引入GPIO库,小车motor端

2.引入UART库,小车蓝牙端

3.主函数

4.源码

总结

前言

stm32f103c6t6蓝牙车,从硬件设计到代码编写手把手教学,附源码

很少有stm32f103c6t6芯片的操作说明,最近芯片大涨,我用c6t6简单的做了个蓝牙小车,供大家参考使用。源码在后面。走过的朋友一键三连哦。

使用工具:

工业设计:fusion360设计外壳

PCB设计: 立创EDA+嘉立创

控制器:stm32cubemx

驱动器:dvr8833

电机:普通的直流电机

控制算法:无,简单的IO口打开关断

设计出来的总体是这样,

CSDN

stm32f103c6t6蓝牙小车车

提示:以下是本篇文章正文内容,下面案例可供参考

一、stm32cubemx配置

用stm32cubemx玩新的芯片是比较友好的,以下是设置步骤

二、fusion360(工业设计)

车身

车轮胎

三、立创EDA(硬件设计)

原理图

3D图

四、控制算法(源代码)

1.引入GPIO库,小车motor端

代码如下(示例):

voidMX_GPIO_Init(void){GPIO_InitTypeDef GPIO_InitStruct={0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOD_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(GPIOB,car0_Pin|car1_Pin|car2_Pin|car3_Pin,GPIO_PIN_SET);/*Configure GPIO pin : PtPin */GPIO_InitStruct.Pin=LED1_Pin;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull=GPIO_NOPULL;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(LED1_GPIO_Port,&GPIO_InitStruct);/*Configure GPIO pins : PBPin PBPin PBPin PBPin */GPIO_InitStruct.Pin=car0_Pin|car1_Pin|car2_Pin|car3_Pin;GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull=GPIO_NOPULL;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);}

GPIO端口配置

2.引入UART库,小车蓝牙端

代码如下(示例):

/**

  ******************************************************************************

  * @file    usart.c

  * @brief  This file provides code for the configuration

  *          of the USART instances.

  ******************************************************************************

  * @attention

  *

  *

© Copyright (c) 2022 STMicroelectronics.

  * All rights reserved.

  *

  * This software component is licensed by ST under BSD 3-Clause license,

  * the "License"; You may not use this file except in compliance with the

  * License. You may obtain a copy of the License at:

  *                        opensource.org/licenses/BSD-3-Clause

  *

  ******************************************************************************

  *//* Includes ------------------------------------------------------------------*/#include"usart.h"/* USER CODE BEGIN 0 *//* USER CODE END 0 */UART_HandleTypeDef huart1;/* USART1 init function */voidMX_USART1_UART_Init(void){huart1.Instance=USART1;huart1.Init.BaudRate=115200;huart1.Init.WordLength=UART_WORDLENGTH_8B;huart1.Init.StopBits=UART_STOPBITS_1;huart1.Init.Parity=UART_PARITY_NONE;huart1.Init.Mode=UART_MODE_TX_RX;huart1.Init.HwFlowCtl=UART_HWCONTROL_NONE;huart1.Init.OverSampling=UART_OVERSAMPLING_16;if(HAL_UART_Init(&huart1)!=HAL_OK){Error_Handler();}}voidHAL_UART_MspInit(UART_HandleTypeDef*uartHandle){GPIO_InitTypeDef GPIO_InitStruct={0};if(uartHandle->Instance==USART1){/* USER CODE BEGIN USART1_MspInit 0 *//* USER CODE END USART1_MspInit 0 *//* USART1 clock enable */__HAL_RCC_USART1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/**USART1 GPIO Configuration

    PA9    ------> USART1_TX

    PA10    ------> USART1_RX

    */GPIO_InitStruct.Pin=GPIO_PIN_9;GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_InitStruct.Pin=GPIO_PIN_10;GPIO_InitStruct.Mode=GPIO_MODE_INPUT;GPIO_InitStruct.Pull=GPIO_NOPULL;HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);/* USART1 interrupt Init */HAL_NVIC_SetPriority(USART1_IRQn,0,0);HAL_NVIC_EnableIRQ(USART1_IRQn);/* USER CODE BEGIN USART1_MspInit 1 *//* USER CODE END USART1_MspInit 1 */}}voidHAL_UART_MspDeInit(UART_HandleTypeDef*uartHandle){if(uartHandle->Instance==USART1){/* USER CODE BEGIN USART1_MspDeInit 0 *//* USER CODE END USART1_MspDeInit 0 *//* Peripheral clock disable */__HAL_RCC_USART1_CLK_DISABLE();/**USART1 GPIO Configuration

    PA9    ------> USART1_TX

    PA10    ------> USART1_RX

    */HAL_GPIO_DeInit(GPIOA,GPIO_PIN_9|GPIO_PIN_10);/* USART1 interrupt Deinit */HAL_NVIC_DisableIRQ(USART1_IRQn);/* USER CODE BEGIN USART1_MspDeInit 1 *//* USER CODE END USART1_MspDeInit 1 */}}/* USER CODE BEGIN 1 *//* USER CODE END 1 *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

UART串口通信配置

3.主函数

代码如下(示例):

/* USER CODE BEGIN Header *//**

  ******************************************************************************

  * @file          : main.c

  * @brief          : Main program body

  ******************************************************************************

  * @attention

  *

  *

© Copyright (c) 2022 STMicroelectronics.

  * All rights reserved.

  *

  * This software component is licensed by ST under BSD 3-Clause license,

  * the "License"; You may not use this file except in compliance with the

  * License. You may obtain a copy of the License at:

  *                        opensource.org/licenses/BSD-3-Clause

  *

  ******************************************************************************

  *//* USER CODE END Header *//* Includes ------------------------------------------------------------------*/#include"main.h"#include"usart.h"#include"gpio.h"/* Private includes ----------------------------------------------------------*//* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*//* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD */#defineLED_PinGPIO_PIN_13#defineLED_GPIOGPIOC//#define LED_Pin0  GPIO_PIN_12//#define LED_GPIO0 GPIOB//#define LED_Pin1  GPIO_PIN_13//#define LED_GPIO1 GPIOB//#define LED_Pin2  GPIO_PIN_14//#define LED_GPIO2 GPIOB//#define LED_Pin3  GPIO_PIN_15//#define LED_GPIO3 GPIOB//#define LED_Pin4  GPIO_PIN_11//#define LED_GPIO4 GPIOA//#define LED_Pin5  GPIO_PIN_12//#define LED_GPIO5 GPIOA//#define LED_Pin6  GPIO_PIN_15//#define LED_GPIO6 GPIOA//#define LED_Pin7  GPIO_PIN_18//#define LED_GPIO7 GPIOA/* USER CODE END PD *//* Private macro -------------------------------------------------------------*//* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV */uint8_taTxStartMessages[]="\r\n******Please enter your choic******\r\nLED_ON:1,LED_OFF:0:\r\n";uint8_tLEDON[]="\r\nLED_ON\r\n";uint8_tLEDOFF[]="\r\nLED_OFF\r\n";uint8_taRxBuffer[1];voidSystemClock_Config(void);/* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/voidSystemClock_Config(void);/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*//* USER CODE BEGIN 0 *//* USER CODE END 0 *//**

  * @brief  The application entry point.

  * @retval int

  */intmain(void){/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */HAL_UART_Receive_IT(&huart1,(uint8_t*)aRxBuffer,1);HAL_UART_Transmit_IT(&huart1,(uint8_t*)aTxStartMessages,sizeof(aTxStartMessages));/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while(1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///    HAL_Delay(300);// HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);// HAL_Delay(300);// HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);// // HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!!!\r\n", 16 , HAL_MAX_DELAY);//   HAL_Delay(100);  // HAL_UART_Receive_IT(&huart1,(uint8_t*)aRxBuffer,1);}/* USER CODE END 3 */}voidHAL_UART_RxCpltCallback(UART_HandleTypeDef*huart){/* Prevent unused argument(s) compilation warning */UNUSED(huart);/* NOTE: This function Should not be modified, when the callback is needed,

          the HAL_UART_TxCpltCallback could be implemented in the user file

  */if(aRxBuffer[0]=='1')//Í£Ö¹{HAL_GPIO_WritePin(GPIOB,car0_Pin,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB,car1_Pin,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB,car2_Pin,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB,car3_Pin,GPIO_PIN_SET);}elseif(aRxBuffer[0]=='2')//Ç°½ø{HAL_GPIO_WritePin(GPIOB,car0_Pin,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB,car1_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB,car2_Pin,GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB,car3_Pin,GPIO_PIN_RESET);}elseif(aRxBuffer[0]=='3'){HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);HAL_UART_Transmit(&huart1,(uint8_t*)LEDON,sizeof(LEDON),0xFFFF);}elseif(aRxBuffer[0]=='4'){HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);HAL_UART_Transmit(&huart1,(uint8_t*)LEDOFF,sizeof(LEDOFF),0xFFFF);}}/**

  * @brief System Clock Configuration

  * @retval None

  */voidSystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct={0};RCC_ClkInitTypeDef RCC_ClkInitStruct={0};/** Initializes the RCC Oscillators according to the specified parameters

  * in the RCC_OscInitTypeDef structure.

  */RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState=RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue=RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState=RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL=RCC_PLL_MUL9;if(HAL_RCC_OscConfig(&RCC_OscInitStruct)!=HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks

  */RCC_ClkInitStruct.ClockType=RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider=RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider=RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider=RCC_HCLK_DIV1;if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_2)!=HAL_OK){Error_Handler();}}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//**

  * @brief  This function is executed in case of error occurrence.

  * @retval None

  */voidError_Handler(void){/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while(1){}/* USER CODE END Error_Handler_Debug */}#ifdefUSE_FULL_ASSERT/**

  * @brief  Reports the name of the source file and the source line number

  *        where the assert_param error has occurred.

  * @param  file: pointer to the source file name

  * @param  line: assert_param error line source number

  * @retval None

  */voidassert_failed(uint8_t*file,uint32_tline){/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,

    ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */}#endif/* USE_FULL_ASSERT *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

主函数

4.源码

其他获取方式

1.公众号:音色味儿,关键词回复:车。

2.CSDN:点击这里:代码资源

3.关注B站:Kisorge

UID:29599216

总结

本文仅仅简单介绍了stm32f103c6t6芯片控制蓝牙车的使用,评论区欢迎讨论。

你可能感兴趣的:(手把手教学!4.5块stm32f103c6t6蓝牙智能车)