×
单片机 > 其他资讯 > 详情

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

发布时间:2020-06-19 发布时间:
|

软件:


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 rn",ADC2_Value);

          printf("PA6 Voltage : %.4f rn",ADC2_Value*3.3f/4096);

          printf("rn");

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.0ProjectsSTM3210C_EVALExamplesUARTUART_Printfsyscalls.c 文件复制到src目录,很多教程没有提到这点。如果不复制这个文件,那么printf()是不起作用的。


 


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



然后任务栏上点击Run图,当然会报错的,原因请查看另一篇我的博客,所以需要右键点击  项目名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 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
用运算放大器构成的气敏控制电路图