STM32简单串口通信(HAL)

本文详细介绍了如何在STM32F103C8T6开发板上实现RS-232通信,包括USB/TTL转232模块工作原理,创建工程配置,以及使用字符控制和串口中断。最后展示了如何通过逻辑分析仪观察串口输出波形。
摘要由CSDN通过智能技术生成

一.实验原理

了解串口协议和RS-232标准,以及RS232电平与TTL电平的区别;了解"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理。

二.工程创建

2.1创建工程及配置

选择STM32F103C8T6芯片

2.1.1RCC配置

2.1.2时钟配置

配置最大始终为72MHz,APB2为72MHz,APB1为36MHz

2.1.3串口配置

2.1.4串口引脚参数配置

2.1.5生成文件

2.2添加程序
while (1)
  {
    /* USER CODE END WHILE */
	  HAL_UART_Transmit(&huart1, "hello windows!\r\n",16,100);//发送hello windows!
	  HAL_Delay(2000);//延时2秒
    /* USER CODE BEGIN 3 */
  }
//在private variable处定义,或者也可以在main中定义,与c差不多
uint8_t message[]="hello windows!\r\n";

//在while中代码
while (1)
  {
    /* USER CODE END WHILE */
	  HAL_UART_Transmit(&huart1, message,16,100);
	  HAL_Delay(2000);
    /* USER CODE BEGIN 3 */
  }
2.3烧录运行结果

三.拓展(使用字符控制)

3.1创建工程

和上述过程一样

3.1.开启串口USART1的中断

3.2添加程序
// 添加定义
#define LENGTH 1 //接收字符数目
uint8_t RxBuffer[LENGTH];//接收数据
uint8_t RxFlag = 0; //0表示没有收到`#`收到`*`,1表示收到了`#`

//main.c中while循环
HAL_UART_Receive_IT(&huart1, (uint8_t*)RxBuffer, LENGTH); //使能接收中断
while (1)
  {
    /* USER CODE END WHILE */
	  if(RxFlag==0){
		  HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!\r\n", 16, 0xffff);
		  HAL_Delay(1000);
	  }
    /* USER CODE BEGIN 3 */
  }
//接收回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
	if(huart->Instance == USART1 && *RxBuffer == '#'){
		RxFlag = 1;
	}else if (huart->Instance == USART1 && *RxBuffer == '*'){
		RxFlag = 0;
	}
	HAL_UART_Receive_IT(&huart1, (uint8_t*)RxBuffer, LENGTH); //因为它有效性只有一次,所以在接收完成后需要重新使能
}
3.3烧录运行

四.仿真逻辑分析仪功能观察串口输出波形

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值