我是靠谱客的博主 专一小天鹅,最近开发中收集的这篇文章主要介绍蓝桥杯学习笔记六:usart Rx的配置和使用(uart)一、为什么是uart而不是usart?二、为什么涉及到中断?三、程序运行的过程?四、我们配置时需要做的东西?五、以串口接收特定数字来实现相应led灯灭为例:六、总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、为什么是uart而不是usart?

        因为是在XCOM里直接输入完成所有的数据再发送,接着单片机再逐个接收数据直至结束符,所以是异步模式,也就是uart

二、为什么涉及到中断?

        因为在实际应用中肯定不知道什么时候才接收数据,所以需要中断的形式。

三、程序运行的过程?

        1、打开中断入口(也就是准备接收)        

	HAL_UART_Receive_IT(&huart1, rx, 1);//huart1代表是uart1,写入rx一个字节。没有接收完成,只是说知道了

        2、正常运行主函数程序

        3、当数据发送到RX时,触发中断,进入"HAL_UART_IRQHandler"

        4、"HAL_UART_IRQHandler()"调用“UART_Receive_IT()”进入处理数据的过程

        5、“UART_Receive_IT()”进行一系列处理之后还会关闭中断入口,并且在完成数据接受之后调用HAL_UART_RxCpltCallback()函数进行完成用户在接受数据之后完成的动作

        6、HAL_UART_RxCpltCallback()根据接收到的信息完成设定的动作之后,再次打开中断入口

四、我们配置时需要做的东西?

  1. "HAL_UART_Receive_IT"开启中断
  2. "HAL_UART_RxCpltCallback"(接收完成回调函数)用户处理中断,并再次开启中断

五、以串口接收特定数字来实现相应led灯灭为例:

uint8_t rx[100];

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(rx[0]<9)
	{
		HAL_GPIO_WritePin(GPIOC ,0x0100<<(rx[0]-1),1);//按哪个哪个灭
		HAL_GPIO_WritePin(GPIOD ,GPIO_PIN_2 ,1);
		HAL_GPIO_WritePin(GPIOD ,GPIO_PIN_2 ,0);
	}
	else 
	{
		HAL_GPIO_WritePin(GPIOC ,GPIO_PIN_All ,1);//全灭
	  HAL_GPIO_WritePin(GPIOD ,GPIO_PIN_2 ,1);
		HAL_GPIO_WritePin(GPIOD ,GPIO_PIN_2 ,0);
	}	
	HAL_UART_Receive_IT(&huart1, rx, 1);//再重新打开中断入口
}


int main(void)
{
  
  HAL_Init();

  SystemClock_Config();

  MX_GPIO_Init();

  MX_USART1_UART_Init();
 
  HAL_UART_Receive_IT(&huart1, rx, 1);

  while (1)
  {
    
  }
}

效果就是,输入对应数字,对应led灭。注意在使用XCOM时,以十六进制发送且不要发送新行!!

六、总结

在考试时配置完成之后,要会找相应的函数出来,配置出来后HAL_UART_RxCpltCallback()是弱定义(weak),然后把它再按照自己的需要正式定义,就可以用了。

最后

以上就是专一小天鹅为你收集整理的蓝桥杯学习笔记六:usart Rx的配置和使用(uart)一、为什么是uart而不是usart?二、为什么涉及到中断?三、程序运行的过程?四、我们配置时需要做的东西?五、以串口接收特定数字来实现相应led灯灭为例:六、总结的全部内容,希望文章能够帮你解决蓝桥杯学习笔记六:usart Rx的配置和使用(uart)一、为什么是uart而不是usart?二、为什么涉及到中断?三、程序运行的过程?四、我们配置时需要做的东西?五、以串口接收特定数字来实现相应led灯灭为例:六、总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部