基于STM32CubeMX|HAL库——printf重定向串口显示+示例:ADC多通道转换(DMA)

一、printf重定向串口显示

1、STM32CubeMX配置

系统内核配置

Debug模式选择Serial Wire

时钟选择外部晶振

时钟树配置

直接拉满,使其工作在最大频率

串口配置

选择异步模式Asynchronous,不使能硬件流控制,具体参数默认

配置好工程后,生成函数。

2.重写fputc函数

在任意需要使用printf函数打印的C文件中,都需要引用#include <stdio.h>头文件

在usart.c和main.c文件中添加

#include <stdio.h>

在usart.c文件中重写fputc函数


int fputc(int ch , FILE *f)
{
	while((USART2->SR&0X40)==0);//循环发送,直到发送完毕
	USART2->DR = (uint8_t) ch;      
	return ch;
}

解释:USART2->SR&0X40 即访问USART状态寄存器的TXE

当TXE为0时,数据还没有被转移至移位寄存器;当TXE为1时,数据被转移至移位寄存器

数据发送完成时,TXE为1,跳出while循环。

二、ADC多通道(DMA)

1.ADC与DMA配置

在本文中,使用ADC多通道(DMA)实验检验printf重定向串口功能

ADC的简介以及多通道的间断模式可见:

STM32CubeMX | HAL库的ADC多通道数据采集(间断模式)-CSDN博客

通过DMA实现多通道数据采集,要将连续模式和间断模式关闭!

如果连续模式开启,那么通过DMA传输到的数组中,每个通道所采集到的值对应数组中的一个位置就是不固定的。

例如你开启了IN0~IN3这四个通道,并通过DMA将这四个通道的数据放到ADC_Value这个大小为4的u16类型数组,

你在第一次采集的时候IN0通道的数值通过DMA被放在ADC_Value[0],

第二次采集的时候IN0采集到的数值就可能被放到了ADC_Value[1],

这样的话就极不方便我们对每个通道的数据进行分析和提取。

最后开启ADC的DMA通道,将DMA的模式配置为周期模式。

(IN9接光敏传感器,IN8接对射式红外传感器)

实验代码如下:

#include "main.h"
#include "adc.h"
#include "dma.h"
#include "usart.h"
#include "gpio.h"

#include <stdio.h>

void SystemClock_Config(void);

uint16_t AD_Value[2];

void  HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
	if(hadc->Instance == ADC1)
	{
		printf("%d %d \n",AD_Value[0],AD_Value[1]);

	}
}

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_DMA_Init();
    MX_ADC1_Init();
    MX_USART2_UART_Init();
    while (1)
    {
	  HAL_ADC_Start_DMA(&hadc1,(uint32_t*)AD_Value,sizeof(AD_Value)/sizeof(AD_Value[0]));
	  HAL_Delay(500);
    }

}

运行结果如下:

后续也会分享自己学习STM32CubeMX--HAL库的一些内容,或者一些课程设计的内容(模/数电,单片机,protel)。感谢点赞与关注。

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式系统设计是指将计算机系统集成到其他设备或系统中,以实现特定功能。而基于STM32CubeMXHAL库的嵌入式系统设计是指利用ST公司的STM32系列微控制器,结合STM32CubeMX工具和HAL库(Hardware Abstraction Layer),进行软硬件设计和开发的过程。 STM32CubeMX是ST公司推出的一款嵌入式系统设计工具,它提供了图形化的界面,可以帮助开发者快速配置STM32微控制器的引脚、时钟、外设等参数,生成初始化代码和项目文件,使整个开发过程更加简化和快捷。 HAL库STM32系列微控制器的硬件抽象层库,提供了一组封装了底层硬件操作的API接口,使开发者能够更加方便地进行外设控制和数据处理等操作。开发者可以根据具体的需求,选择需要的API接口,编写相应的代码,完成对硬件的控制和操作。 在使用STM32CubeMXHAL库进行嵌入式系统设计时,可以通过STM32CubeMX工具进行硬件的初始化和配置,生成相应的代码和项目文件。然后,在IDE(集成开发环境)中使用HAL库提供的API接口,编写代码进行软件的开发和应用程序的编写。通过这种方式,开发者可以在短时间内快速完成嵌入式系统设计,提高开发效率和产品质量。 总而言之,基于STM32CubeMXHAL库的嵌入式系统设计提供了一种快速、简化的嵌入式软硬件开发方法,使开发者能够更加高效地进行嵌入式应用的设计与开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值