STM32CubeMX学习教程之七:ADC读取电压并输出到串口

完整源码下载:

https://github.com/simonliu009/STM32CubeMX-ADC

软件:

STM32CubeMX V4.25.0  

System Workbench V2.4

固件库版本:
STM32Cube FW_F1 V1.6.1

硬件:

OneNet 麒麟座V2.3

在STM32CubeMX中新建项目,选择正确的MCU型号

 

首先设置RCC和SYS,如下图

 

 

配置USART1为Asychronous模式

 

 

UART1配置用默认的115200,8, None和1就好。

 

然后设置PA6引脚为ADC2_IN6, 完整引脚配置如下图:

 

然后根据板子实际情况设置时钟(麒麟座外部晶振是12M,STM32F103x的最高主频是72M),注意CubeMX可能会自动把ADC预分频系数设为6。

ADC2设置如下

 

 

 

Project - setting ,ToolChain/IDE选择 SW4STM32

勾选这里

保存以后,点击任务栏的生成代码图标

生成完毕以后在弹出的对话框点击"Open Project", System Workbench自动打开Eclipse并导入和打开了项目。

参考上一篇文章的printf()重定向到串口的代码,编辑main.c, 添加如下代码

 

/* Private function prototypes -----------------------------------------------*/
#ifdef __GNUC__
/* With GCC, small printf (option LD Linker->Libraries->Small printf
   set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */

/* Private functions -------------------------------------------------
/* USER CODE BEGIN 0 */

PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}
/* USER CODE END 0 */

然后修改main.c,添加一个变量存储ADC的值

  /* USER CODE BEGIN 1 */
	uint16_t ADC2_Value;
  /* USER CODE END 1 */

 

输出内容:

 

 while (1)
  {


  /* USER CODE END WHILE */


  /* USER CODE BEGIN 3 */
      HAL_ADC_Start(&hadc2);
      HAL_ADC_PollForConversion(&hadc2, 50);


      if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc2), HAL_ADC_STATE_REG_EOC))
      {
          ADC2_Value = HAL_ADC_GetValue(&hadc2);
          
          printf("ADC2 Reading : %d \r\n",ADC2_Value);
          printf("PA6 Voltage : %.4f \r\n",ADC2_Value*3.3f/4096);
          printf("\r\n");
} 
HAL_Delay(1000); 
}

注意这里printf()输出浮点数%.4f会提示错误: 

The float formatting support (-u _printf_float) is not enabled from linker flags

所以需要在这里添加一个-u _printf_float

 

project properties > C/C++ Build > Settings > Tool Settings (TAB) > MCU GCC Linker > Miscellaneous > Linker flags

在把-specs=nosys.specs -specs=nano.specs 改为 -specs=nosys.specs -specs=nano.specs -u _printf_float
 

最后,不要忘记把STM32Cube_FW_F1_V1.6.0\Projects\STM3210C_EVAL\Examples\UART\UART_Printf\syscalls.c 文件复制到src目录,很多教程没有提到这点。如果不复制这个文件,那么printf()是不起作用的。

 

然后右键点击项目,选择Properties, Run-Debug Settings, 点击右侧的New,在弹出对话框中选择Ac6 STM32 Debugging。

然后任务栏上点击Run图,当然会报错的,原因请查看另一篇我的博客(https://blog.csdn.net/toopoo/article/details/79680323),所以需要右键点击  项目名Run.cfg ,给它改个名字,

 

然后右键点击项目树里面的项目名称,选择“Propeties”,然后在Run/Debug Settings-选择项目名-Edit-Main-C/C++Application那里点击“Search Project”,然后选择出现的默认的elf文件:

然后在Debugger-User Defined-Browse 那里选择你自己改名的配置文件:

然后右键点击那个新的cfg文件,选择"Open With - Text Editor", 进行如下更改:

source [find interface/stlink.cfg] 更改为 source [find interface/stlink-v2.cfg]

reset_config srst_only srst_nogate connect_assert_srst 这一行改为 reset_config none 

然后再Run一下,就可以了。

 

然后使用串口程序,波特率设为115200,就可以看到如下这些信息:

 

ADC2 Reading : 1646 
PA6 Voltage : 1.3261 

ADC2 Reading : 1559 
PA6 Voltage : 1.2560 

ADC2 Reading : 3217 
PA6 Voltage : 2.5918 

ADC2 Reading : 3325 
PA6 Voltage : 2.6788 

ADC2 Reading : 1627 
PA6 Voltage : 1.3108 

ADC2 Reading : 1587 
PA6 Voltage : 1.2786 

ADC2 Reading : 3221 
PA6 Voltage : 2.5950 

ADC2 Reading : 2663 
PA6 Voltage : 2.1455 

 

 

  • 22
    点赞
  • 161
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
关于STM32CubeMX系列学习教程,有很多资源可供参考。在这些教程中,你可以学习到如何使用STM32CubeMX工具来进行STM32芯片的图形化配置。这个工具可以帮助你快速建立和初始化工程,并生成C语言的初始化代码,从而减轻开发工作的负担,提高开发效率。同时,STM32CubeMX工具还提供了可视化的引脚、外设和时钟配置功能,使得开发者可以更方便地进行硬件配置。这些教程涵盖了多个方面的内容,包括GPIO的输入输出、外部中断、定时器中断、PWM实现呼吸灯效果、串口通信、ADC读取电压等等。你可以根据自己的需求选择相应的教程进行学习。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [STM32CubeMX学习系列教程目录](https://blog.csdn.net/toopoo/article/details/88234293)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [用stm32cubemx点亮一个流水灯](https://blog.csdn.net/algorithm_lixuan/article/details/76640298)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32 CubeMx教程 -- 基础知识及配置使用教程](https://blog.csdn.net/Dir_x/article/details/128846252)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值