查看: 942|回复: 2

【瑞萨RA4系列开发板体验】ADC电压测量

[复制链接]

116

主题

134

帖子

3790

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3790
发表于 2023-2-1 16:08:25 | 显示全部楼层 |阅读模式
【瑞萨RA4系列开发板体验】ADC电压测量
作者:lugl

瑞萨RA4M2集成了● 12-bit A/D Converter (ADC12)● 12-bit 及温度传感器(TSN)。可以8位、10位、12位来采集数据,转换速率1M

【学习资料】
①B站的视频教程:https://www.bilibili.com/video/B ... _history.page.click
②CSDN博客:https://blog.csdn.net/qq_24312945/article/details/120791923
③官方提供的例程:r20an0608eu0121-ek-ra4m2-exampleprojects\ek_ra4m2\adc

【开发步骤】
在上面printf的工程上添加adc功能:
1、打开配置工具:

2、选择P002这个脚来进行ADC检测:

3、选择12位转换、右对齐,单次转换、Channel2

4、定义回调函数为adc0_callback、中断级别2:

5、同步工程,回到keil.
6、添加bsp_adc.c、bsp_adc.h,并把这两个文件添加到工程:

7、编写bsp_adc.c内容如下:
  1. #include "bsp_adc.h"
  2. #include "bsp_debug_uart.h"

  3. void bsp_adc_init(void)
  4. {
  5.   fsp_err_t err = FSP_SUCCESS;
  6.   /* Initializes the module. */
  7.   err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
  8.   /* Handle any errors. This function should be defined by the user. */
  9.   if(FSP_SUCCESS != err)
  10.     {
  11.         printf("ADC0 Open API failed\r\n");
  12.     }
  13.   /* Enable channels. */
  14.     err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
  15.     assert(FSP_SUCCESS == err);
  16. }

  17. volatile bool scan_complete_flag = false;
  18. void adc0_callback(adc_callback_args_t * p_args)
  19. {
  20.         //宏将告知编译器回调函数不使用参数 p_args,从而避免编译器发出警告,
  21.     FSP_PARAMETER_NOT_USED(p_args);
  22.     scan_complete_flag = true;
  23. }

  24. void read_adc(void)
  25. {
  26.   fsp_err_t err = FSP_SUCCESS;
  27.   double a0;
  28.   uint16_t adc_data0=0;
  29.   (void) R_ADC_ScanStart(&g_adc0_ctrl);
  30.    scan_complete_flag = false;
  31.   while (!scan_complete_flag)
  32.   {
  33.       /* Wait for callback to set flag. */
  34.   }
  35.   
  36.   err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_2, &adc_data0);
  37.   assert(FSP_SUCCESS == err);
  38.   a0=(double)(adc_data0/4095.0)*3.3;
  39.   printf("v: %.02f \r\n",a0);
  40. }
复制代码
bsp_adc.h:
  1. #ifndef __BSP_ADC_H__
  2. #define __BSP_ADC_H__


  3. #include "hal_data.h"
  4. #include <stdio.h>

  5. void bsp_adc_init(void);
  6. void read_adc(void);


  7. #endif
复制代码
8、在hal_entry.c中增加如下内容:
  1. void hal_entry(void)
  2. {

  3.   bsp_uart_init();
  4.   bsp_can0_init();
  5.   bsp_adc_init();//adc初始化
  6.   while(1)
  7.   {
  8.     can_send();
  9.     read_adc();//读取adc的数值
  10.     R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
  11.       // NOLINT100->160
  12.   }
  13. #if BSP_TZ_SECURE_BUILD
  14.     /* Enter non-secure code */
  15.     R_BSP_NonSecureEnter();
  16. #endif
  17. }
复制代码
下载到开发板,把P002接到3.3v上,可以看到测得的电压为3.30V:

把p002接到数据电源上,测试动态数据,非常准确:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

52

主题

150

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
11233
发表于 2023-2-2 07:23:38 | 显示全部楼层

谢谢分享!
回复

使用道具 举报

3

主题

195

帖子

1218

积分

金牌会员

Rank: 6Rank: 6

积分
1218
发表于 2023-3-14 11:15:24 | 显示全部楼层

不错,学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

用户排行榜

RA助手

主题: 116帖子:134精华:0

RA_Lance

主题: 93帖子:136精华:9

lugl

主题: 52帖子:150精华:1

xujiwei263

主题: 18帖子:87精华:0

Juggernaut

主题: 12帖子:118精华:0

books咦

主题: 11帖子:11精华:2
快速回复 返回顶部 返回列表