发新帖我要提问
12
返回列表
打印
[其他ST产品]

STM32CubeMX——串口通信

[复制链接]
楼主: 王派oo
手机看帖
扫描二维码
随时随地手机跟帖
21
王派oo|  楼主 | 2023-1-28 12:21 | 只看该作者 回帖奖励 |倒序浏览
举例:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  if(huart->Instance == USART1){
                if(receive_data=='1'){
                        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, 0);
                }
                else if(receive_data=='0'){
                        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, 1);
                }
                else{
                        //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
                }
        }
        HAL_UART_Receive_IT(&huart1, &receive_data, 1);
}

使用特权

评论回复
22
王派oo|  楼主 | 2023-1-28 12:22 | 只看该作者
main.c函数具体代码
/* USER CODE BEGIN 0 */
uint8_t send_data[] = "hello world\r\n";
uint8_t receive_data;

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  if(huart->Instance == USART1){
                if(receive_data=='1'){
                        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, 0);
                }
                else if(receive_data=='0'){
                        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, 1);
                }
                else{
                        //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
                }
        }
        HAL_UART_Receive_IT(&huart1, &receive_data, 1);
}
/* USER CODE END 0 */

/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]  The application entry point.
  * @retval int
  */
int main(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, &receive_data, 1);  //在这里面一定不要忘记开启串口中断
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
                HAL_UART_Transmit(&huart1, send_data , sizeof(send_data), 1000);
                HAL_Delay(1000);
    /* USER CODE BEGIN 3 */
  }
       
  /* USER CODE END 3 */
}

使用特权

评论回复
23
王派oo|  楼主 | 2023-1-28 12:24 | 只看该作者
总结

串口操作的具体流程:

    初始化串口
    如果是发送操作直接在无限循环中调用串口发送函数
    如果是接收数据操作,则现在main函数的初始化中调用串口接收中断函数。
    进入中断后,接收完数据  进入中断回调函数
    重写中断回调函数,并且在此函数中处理接收的数据
    处理完数据,一定要在回调函数中再调用一次HAL_UART_Receive_IT函数,使得程序可以重新触发接收中断

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则