【百问网智能家居二期】基础班学习记录_串口

本文记录了在百问网智能家居二期培训中关于STM32串口通信的学习,包括初始化USART1以向电脑发送数据,实现printf和scanf重定向。此外,还介绍了如何通过USART2与ESP8266进行通讯,发送AT指令并接收返回数据。实践中使用中断方式启动串口接收,并展示了关键代码段。
摘要由CSDN通过智能技术生成

2022.4.6~2022.4.12 百问网开启智能家居二期培训,以下记录学习过程及一些心得。小白入门,水平有限,差错之处在所难免,欢迎大家指正。

DAY5:

一、调试串口USART1

使用USART1向电脑发送打印信息。
1) 初始化USART:设置波特率,收发选择,有效数据位等
2) 串口引脚初始化:USART使能、GPIO端口时钟使能、GPIO引脚设置为USART复用;
3) 重定向printf和scanf;

相关代码:

void UsartInit(uint32_t baudrate)
{
    husart.Instance         = USARTx;                  // 选择USART1
    husart.Init.BaudRate    = baudrate;                // 配置波特率
    husart.Init.WordLength  = USART_WORDLENGTH_8B;     // 配置数据有效位为8bit
    husart.Init.StopBits    = USART_STOPBITS_1;        // 配置一位停止位
    husart.Init.Parity      = USART_PARITY_NONE;       // 不设校验位
    husart.Init.Mode        = USART_MODE_TX_RX;        // 可收可发
    husart.Init.HwFlowCtl   = UART_HWCONTROL_NONE;
    
    // 使用库函数初始化USART1的参数
    if (HAL_UART_Init(&husart) != HAL_OK)
    {
        Error_Handler();
    }
}

/*****************************************************
*function:    写字符文件函数
*param1:    输出的字符
*param2:    文件指针
*return:    输出字符的ASCII码
******************************************************/
int fputc(int ch, FILE *f)
{
    HAL_UART_Transmit(&husart, (uint8_t*)&ch, 1, 10);
    return ch;
}

/*****************************************************
*function:    读字符文件函数
*param1:    文件指针
*return:    读取字符的ASCII码
******************************************************/
int fgetc(FILE *f)
{
    uint8_t ch = 0;
    HAL_UART_Receive(&husart, (uint8_t*)&ch, 1, 10);
    return (int)ch;
}


/*
 * 添加如下代码,则不需要在工程设置中勾选Use MicroLIB
*/

#pragma import(__use_no_semihosting)
 
struct __FILE
{
    int a;
};
 
FILE __stdout;
FILE __stdin;
void _sys_exit(int x)
{
    
}

二、连接WIFI模块串口USART2

使用USART2与ESP8266通讯

1) 启动串口2接收(中断方式)
2) 串口2发送AT指令
3)接收模块返回数据

相关代码:

  // 1.启动串口2接收(中断方式)
  USART2_StartRx();
  
  // 2.串口2发送AT指令
  USART2_Transmit(tx_data, sizeof(tx_data), 500);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    // 3.接收模块返回数据
    data_len = USART2_Receive(rx_data);
    if (data_len > 0) //接收到数据
    {
        printf("Receive: %s\n\r", rx_data); // 打印接收的数据
        USART2_ClearBuf(); // 清空接收的buf
        data_len = 0; // 准备下一次接收
    }
  }

注:本文参考百问网100ASK_STM32F103_MINI用户手册。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值