推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

HAL库教程5:串口数据发送

   2023-08-14 网络整理佚名1570
核心提示:按键控制串口发送代码编写是HAL库提供的串口发送函数。在HAL库的手册中,或者在代码中跳转到函数可以找到函数的说明信息。在正确连接硬件,并配置串口助手以后,可以看到按键信息如下,说明串口数据发送成功。需要说明的是,HAL库提供的发送函数不止一个,还有中断方式和DMA方式,这是这个函数用法最简单。在刚刚的例子中,需要把字符装填到数组中,再通过数组来发送数据,比较麻烦,能否直接打印字符串?

使用配置串口1配置引脚

我的板子上通过引脚引出了串口1,串口1连接到PA8和PA9。

配置串口通讯参数

使能串口1,并将其配置为异步模式,波特率为8N1。

使能串口中断

查看生成的代码

引脚和中断的初始化在.c中

通信中使用的参数,如波特率校验方式等,在main.c中初始化。

同样是串口初始化代码,为什么要单独写呢?

这可能是一种等级观念。 如果换板子,只需要修改引脚和中断的功能,用户功能不需要修改。 例如,用户关心的是波特率,而不是引脚。

按键控制串口发送代码编写

通过串口打印关键信息。

//main.c
int main(void)
{
  
  u8 UART_BUF[12] = "you press A!";
  u8 key;
  
  while (1)
  {
    key = KEY_Scan(0);
    switch(key)
    {
      case KEY_A_PRES:  UART_BUF[10] = 'A'; break;
      case KEY_B_PRES:  UART_BUF[10] = 'B'; break;
      case KEY_C_PRES:  UART_BUF[10] = 'C'; break;
      case KEY_D_PRES:  UART_BUF[10] = 'D'; break;
      default: break;     
    }
    if(key)
    {
      LED1 = !LED1;
      HAL_UART_Transmit(&huart1,UART_BUF,12,0xffff);   
    }
    
  }
}

是HAL库提供的串口发送函数。 函数的描述信息可以在HAL库的手册中找到,或者通过跳转到代码中的函数来找到。

根据描述,这个发送函数是阻塞的。 参数为超时时间,代表某个执行函数占用串口的最长时间,单位为毫秒。 简单来说,在当前数据发送完毕之前,不能再发送其他数据。 因此,在调用该函数时,需要指定参数以及发送时间。 在此期间,由于串口资源被独占,发送函数无法成功调用。 如果在规定时间内发送完数据,则释放占用的串口资源; 如果时间到了,即使数据还没有发送完全(例如数据量很大),仍然需要将串口资源的控制权交还给其他人使用。

正确连接硬件并配置好串口助手后,可以看到如下关键信息,说明串口数据发送成功。

需要注意的是,HAL库提供的发送函数不止一种,还有中断模式和DMA模式。 这是使用此功能的最简单方法。

映射功能

刚才的例子中,先将字符填充到数组中,然后通过数组发送数据,比较麻烦。 可以直接打印字符串吗? 可以通过C语言重映射函数来实现。

创建 UART.c 文件并将其添加到项目中。 输入以下代码:

#include "stdio.h"
#include "main.h"
#ifdef __GNUC_
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
//重映射printf的功能
PUTCHAR_PROTOTYPE
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
 
  return ch;
}

请注意适当的外部声明。我在 main.h 中编写

;

然后就可以在main函数中调用了。

//main() while(1)
    if(key)
    {
      LED1 = !LED1;
      printf("return value is %d! \r\n",key);
      HAL_UART_Transmit(&huart1,UART_BUF,12,0xffff);    //发送接收到的数据
    }

引脚复用和功能重新映射

如果在 中将PB6 设置为串口功能,则可以发现PA9 已成为公共引脚。

这意味着PA9和PB6都可以用作串口1的TX引脚,但不能同时使用。 引脚有点像外围设备的插座。 外设可以从前门或后门出去,但不能同时从前门和后门出去。

引脚的功能不止一种,我们可以称之为引脚的复用; 例如可以作为普通IO,用来操作LED或者按钮,还可以作为串口使用。

外设不仅可以连接到引脚x,还可以连接到引脚y,我们称之为重映射。 STM32 MCU功能更强大,外设也很多。 外设默认对应某个引脚,可以通过重映射将外设映射到其他引脚,以充分利用片上资源。

详细的引脚重新映射可以在数据表的表 9 中找到。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON