STM32单片机串口调试输出

当我们还没学到单片机上的显示屏又想知道我们获取到的内容,如温度,声音等时,我们就可以用串口输出。

找到对应开发文档中的对应管脚,如下图

配置串口

CTRL + s 自动生成代码

在usart.h中添加stdio.h头文件

添加在usart.c中添加代码,使printf函数重定向

#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch,FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
	HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF);
	return ch;
}

在main函数中使用printf函数

此时我们烧录到单片机上,是看不出来结果的,我们需要下载一个串口调试助手​​​​​​

下载好之后运行如下,并把DTR取消

当烧录完成后,使单片机与烧录软件断开状态,打开串口调试助手,并打开串口,注意,波特率和代码中的应当一致,运行单片机程序。就会出现以下内容

值得注意的是,浮点类型的数据不能直接输出,需要再设置一个东西,且若是printf函数中没有\n作为结束标志,它将一直存储直到溢出才一次性打印出来,相关知识可以去了解

设置如下:

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32单片机常用IO、SPI、串口/USB通信调试 1. IO口 IO口是单片机最基本的输入输出口,用于连接外部设备,并且可以配置为输入或输出模式。在STM32单片机中,IO口可以通过寄存器来进行配置和控制。 具体操作步骤如下: 1)使能GPIO时钟 首先需要使能GPIO的时钟,否则无法对其进行配置和使用。可以使用RCC_APB2PeriphClockCmd()函数来使能GPIO对应的时钟,例如: ``` RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能GPIOA时钟 ``` 2)配置GPIO模式 可以使用GPIO_InitTypeDef结构体来对GPIO进行配置,包括模式、速度、上下拉等等,例如: ``` GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//选择要配置的GPIO引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//设置为输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置IO口输出速度 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//设置为推挽输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//设置为无上下拉 GPIO_Init(GPIOA, &GPIO_InitStructure);//将配置应用到GPIOA上 ``` 3)控制IO口 可以使用GPIO_WriteBit()函数来控制IO口的输出电平,例如: ``` GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);//GPIOA的0号引脚输出高电平 ``` 2. SPI通信 SPI是一种串行外设接口,它可以在单片机和外设之间传输数据。在STM32单片机中,SPI接口可以通过SPI_InitTypeDef结构体来进行配置,包括时钟分频、数据位数、CPOL和CPHA等等,例如: ``` SPI_InitTypeDef SPI_InitStructure; SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//设置为全双工模式 SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//设置为主设备模式 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//设置数据位数为8位 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;//设置时钟极性为低电平时有效 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;//设置时钟相位为第一边沿 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//使用软件控制片选信号 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;//设置时钟分频系数为256 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//设置数据传输的第一位为最高位 SPI_Init(SPI1, &SPI_InitStructure);//将配置应用到SPI1上 ``` 可以使用SPI_I2S_SendData()函数和SPI_I2S_ReceiveData()函数来发送和接收数据,例如: ``` SPI_I2S_SendData(SPI1, data);//发送数据 data = SPI_I2S_ReceiveData(SPI1);//接收数据 ``` 3. 串口通信 串口通信是一种常用的通信方式,它可以在单片机和计算机之间传输数据。在STM32单片机中,串口通信可以通过USART_InitTypeDef结构体来进行配置,包括波特率、数据位数、停止位等等,例如: ``` USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 9600;//设置波特率为9600bps USART_InitStructure.USART_WordLength = USART_WordLength_8b;//设置数据位数为8位 USART_InitStructure.USART_StopBits = USART_StopBits_1;//设置停止位为1位 USART_InitStructure.USART_Parity = USART_Parity_No;//设置无奇偶校验 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//设置无硬件流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//设置为同时接收和发送 USART_Init(USART1, &USART_InitStructure);//将配置应用到USART1上 ``` 可以使用USART_SendData()函数和USART_ReceiveData()函数来发送和接收数据,例如: ``` USART_SendData(USART1, data);//发送数据 data = USART_ReceiveData(USART1);//接收数据 ``` 4. USB通信调试 STM32单片机还支持USB通信调试,可以通过CDC(Communication Device Class)协议实现。首先需要在STM32单片机上配置USB的时钟和引脚,然后再使用USB_CDC_Init()函数来初始化USB通信。之后就可以使用USB_CDC_SendData()函数和USB_CDC_ReceiveData()函数来发送和接收数据,例如: ``` USB_CDC_Init(); USB_CDC_SendData(data);//发送数据 data = USB_CDC_ReceiveData();//接收数据 ``` 需要注意的是,在使用USB通信调试时,需要在计算机上安装相应的驱动程序和串口调试工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值