STM32CUBEMX_USART串口的输入和输出

实验1:点亮LED
实验2:按键控制LED
实验3:外部中断检测按键
实验4:扩展芯片检测按键
实验5:定时器实现LED闪烁
实验6:基于PWM的呼吸灯
实验7:检测输入的PWM频率和脉宽
实验8:串口的输入和输出
实验9:串口使用PRINTF函数
实验10:SPI接口操作片外FLASH
实验11:SPI接口操作TF卡
实验12:IIC接口操作OLED屏幕
实验13:ADC电压采样

串口是单片机上非常重要的一个接口,可以用来通信、调试、打印关键信息。本节实验用来实现串口数据的接收和发送。

先看原理图,板子使用的是STM32F103C8T6的串口1,即USART1。该串口连接USB转串口芯片CH340C,最终通过串口线连接电脑,实现串口数据的接收与发送。

步骤如下:

1、新建工程,进行基本配置。通过点击“ACCESS TO MCU SELECTOR”来创建一个新的工程:

参照实验1,芯片选择“STM32F103C8”。

打开外部时钟,点击“System Core”,选择RCC,在右侧弹出的菜单栏中选择“Crystal/Ceramic Resonator”。

选择调试接口,点击“System Core”,选择RCC。,在右侧弹出的菜单栏中选择“Serial Wire”。

2、配置串口。如图,选择异步模式,依次配置波特率、收发模式。

Buad Rate为传输速度,Data Direction配置为支持接收和发送。

3、串口中断配置。开启串口中断。

生成中断相关代码。

4、配置PC15为输出模式,命名为“D1”。可通过串口控制D1状态。

5、时钟配置。参照实验1.

6、参照实验1的步骤7,进行相应配置,生成工程文件。

7、修改工程。位置1,定义相应变量,存储收到的数据或计算数据个数:

代码:

uint8_t aRxBuffer;						//½ÓÊÕÖжϻº³å
uint8_t Uart1_RxBuff[256];		//½ÓÊÕ»º³å
uint8_t Uart1_Rx_Cnt = 0;			//½ÓÊÕ»º³å¼ÆÊý
uint8_t	cAlmStr[] = "Êý¾ÝÒç³ö(´óÓÚ256)\r\n";
uint8_t	helloStr[23] = "USART1 start to work!\r\n";

位置2,开启串口接收中断,并输出提示信息:

代码:

	HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);
	HAL_UART_Transmit_IT(&huart1, (uint8_t *)&helloStr, 23);

位置3,对接收的数据做判断,并把收到的数据发送出去。

代码:

void HAL_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(Uart1_Rx_Cnt >= 255)  //Òç³öÅжÏ
	{
		Uart1_Rx_Cnt = 0;
		memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff));
		HAL_UART_Transmit(&huart1, (uint8_t *)&cAlmStr, sizeof(cAlmStr),0xFFFF);	
	}
	else
	{
		Uart1_RxBuff[Uart1_Rx_Cnt++] = aRxBuffer;   //½ÓÊÕÊý¾Ý»º´æ
		
		if(aRxBuffer == 'a')												//GPIO•¬×ª
		{
			HAL_GPIO_TogglePin(D1_GPIO_Port,D1_Pin);
		}
	
		if((Uart1_RxBuff[Uart1_Rx_Cnt-1] == 0x0A)&&(Uart1_RxBuff[Uart1_Rx_Cnt-2] == 0x0D)) //ÅжϽáÊøλ
		{
			HAL_UART_Transmit(&huart1, (uint8_t *)&Uart1_RxBuff, Uart1_Rx_Cnt,0xFFFF); //½«ÊÕµ½µÄÊý¾Ý•¢³öÈ¥
			Uart1_Rx_Cnt = 0;
			memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); //Çå¿ÕÊý×é
		}
	}
	
	HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);   //ÔٴοªÆô½ÓÊÕÖжÏ
}

修改后,保存,编译、下载,重新上电。使用串口助手连接板子和电脑,发送数据,单片机收到后,会直接返回。

整个过程有PPT、数据手册、原理图、源码、相关软件,在公众号(单片机爱好者)回复关键词:002或者STM32CUBEMX教程,即可获取下载链接。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据