11.19串口通信

 本周实现stm32串口定长收发。

首先利用CubeMX进行stm32初始化编辑:

这里PA2选用USART2,其实就是UART串口,利用TTL数据传输

由于之前选择引脚USART2模式,这里选USART2:

传输模式是TTL,也就是Asynchronous:

配置好之后是这样的:

物理接线:

上图显示的是:PA2  -->   TX

                         PA3  -->   RX

TX是输出,RX是输入。在与CH340转串口连接的时候应当:

stm32的输出<------>CH340的输入

stm32的输入<------>CH340的输出

为了保持两边低电平电压相同,应当再接互相接地,也就是(GND是地线):

GND<------>GND

黑线接A3;灰线接A2;棕线接G;

接着ST-LINK接线:

GND<----->GND

3.3V<----->3,3

SWCLK<----->DCLK

SWDIO<----->DIO

从CubeMX 点GENERATE CODE 导入KEIL5 MDK,

在while(1)下面输入下面两行代码:

其中:

第一个函数:HAL_UART_Receive()是stm32接受数据指令,括号里面4个参数,

(&要操作的串口指针,需要发送的信息的指针,内容长度,超时时间)

**要操作的串口指针:一般是huart2,前面要加上“&”

**需要发送信息的指针:一般由自己定义一个数组,我们这里定义“shuzhu”

由于HAL_UART_Receive在定义里面需要一个uint_8的指针,所以直接用uint_8定义不用char

**内容长度:由于在小车开始比赛扫二维码的时候出来的是一个7字节的字符串,所以数组长度设置为7,但是我发现实际运用中可能会出现一些问题:

在返回“213+321”的时候少了一个值,然后我把数组长度调成8,问题好像就没有了

**超时时间:这里设置无穷大,也就是HAL_MAX_DELAY(0xFFFFFFFF),意思就是只要不输入数据,单片机就不会进行下一个步骤。如果不是无穷,就会出现没输入数据单片机就开始发问好过来。

第二个函数:HAL_UART_Transmit()就是单片机发送数据,括号里面四个参数跟上面一个一样,只是第四个参数:超时时间有改动,设置成100毫秒,若100ms内还没发送就停止发送。

代码:

/* USER CODE BEGIN 2 */
  uint8_t shuzhu[8];

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		HAL_UART_Receive(&huart2,shuzhu,8,HAL_MAX_DELAY);
		HAL_UART_Transmit(&huart2,shuzhu,8,100);
		
		
    /* USER CODE END WHILE */

效果展示:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值