1464|7

2942

帖子

4

TA的资源

五彩晶圆(中级)

楼主
 

【瑞萨RA4E1评估板】keil项目和ADC测试 [复制链接]

FPB-RA4E1板子的MCU RA4E1是Arm® Cortex®-M33 内核的芯片,那么就可以使用keil工具来开发项目,但是keil的官方资料不是很多,但是不代表官方不支持keil开发,瑞萨官方提供了FSP工具开加速项目的开发,使用这款工具可以快速的建立iar、keil、cmake等mcu项目。诸如时钟配置,软件驱动,RTOS集成等等都可以搞定。下载FSP链接

这个软件的下载后,setup_fsp_v4_5_0_rasc_v2023-04.exe直接安装就可以了。过程非常的简单。

这之前一直使用e2Studio,这个软件运行较慢,编辑功能不是很习惯,安装完后

建立项目:

 填写项目名称和目录。选择芯片或开发板,注意:这里有一个大坑!不能选择直接选择芯片,这样的项目程序会卡死在SystemInit()函数里。

这个不知道是不是软件bug,而且我对照了项目的配置,好像都是一样地。有知道的还请告知。

/*******************************************************************************************************************//**
 * MCU starts executing here out of reset. Main stack pointer is set up already.
 **********************************************************************************************************************/
void Reset_Handler (void)
{
    /* Initialize system using BSP. */
    SystemInit();

    /* Call user application. */
    main();

    while (1)
    {
        /* Infinite Loop. */
    }
}

所以测试选择了开发板。而没有选择芯片。
  IDE选择Keil,我的MDK已升级到了ARM compiler 6版本,而且这个版本可以很好的兼容clang编译器。较好使用GNU的arm库。

 这个选择flat模式。

项目配置:

 使用new stack先加入r_sci_uart驱动,进行配置。

 项目配置为通道9,因为只有通道9可以使用arduino接口的uart引脚,接着设置sci

 设置sci为异步串口。设置中断函数名user_uart_callback()

 

 修改这几处配置。填写中断函数名,user_adc_callback()

  生成项目配置。打开keil

volatile bool uart_send_complete_flag = false;
volatile bool scan_complete_flag=false;
volatile IRQn_Type irq;
/**************************************************************/


/**************************************************************/
/* Callback function */
void user_uart_callback(uart_callback_args_t *p_args)
{
    /* TODO: add your own code here */
    switch(p_args->event)
    {
        case UART_EVENT_TX_COMPLETE:
            uart_send_complete_flag =true;
            break;
        default:
            break;
    }

}

/* Callback function */
void user_adc_callback(adc_callback_args_t *p_args)
{
    /* TODO: add your own code here */
	  if(ADC_EVENT_SCAN_COMPLETE == p_args->event)
    {
			  scan_complete_flag = true;
        irq = R_FSP_CurrentIrqGet();
        R_BSP_IrqDisable(irq);
			  
    }
		//scan_complete_flag = true;
}

先加入,两个中断回调函数。主要的功能在hal_entry()函数中

/*******************************************************************************************************************//**
 * main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used.  This function
 * is called by main() when no RTOS is used.
 **********************************************************************************************************************/
void hal_entry(void)
{
    /* TODO: add your own code here */
		fsp_err_t  err = FSP_SUCCESS;
	  unsigned char send_buff[32]="RA E2STUDIO ADC\n\r";
	  
	  uint16_t adc_data0=0;
    double a0 = 0.0;
	
		err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
	
    size_t buff_len = strlen((char *)send_buff);
    err = R_SCI_UART_Write(&g_uart9_ctrl, send_buff, buff_len);
    if(FSP_SUCCESS != err) __BKPT();
        while(uart_send_complete_flag == false){}
    uart_send_complete_flag = false;
		memset(send_buff,0,32);			
					
	   err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
     assert(FSP_SUCCESS == err);

     err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
     assert(FSP_SUCCESS == err);
					

    for(;;){

			  err = R_ADC_ScanStart(&g_adc0_ctrl);
			  assert(FSP_SUCCESS == err);
			     while(scan_complete_flag == false){}
				scan_complete_flag = false;
				R_BSP_IrqEnable(irq);
			  
        err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data0);
        assert(FSP_SUCCESS == err);
        a0=(double)(adc_data0/4095.0)*3.3;

        sprintf((char *)send_buff, "a0=%f\r\n",a0);
				buff_len = strlen((char *)send_buff);
				err = R_SCI_UART_Write(&g_uart9_ctrl, send_buff, buff_len);
        if(FSP_SUCCESS != err) __BKPT();
           while(uart_send_complete_flag == false){}
        uart_send_complete_flag = false;
        memset(send_buff,0,32);
						 
        err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07, BSP_IO_LEVEL_HIGH);
        err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08, BSP_IO_LEVEL_LOW);
        R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);
        err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_07, BSP_IO_LEVEL_LOW);
        err = R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_08, BSP_IO_LEVEL_HIGH);
        R_BSP_SoftwareDelay (200, BSP_DELAY_UNITS_MILLISECONDS);

    }
#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}

程序是先是打开uar和adc设备,后面是调用驱动功能程序。

这里又有一个坑:为啥不用printf函数呢,因为搞不定!我先后实验了GNU的printf和keil的库,结果发现都不能工作,主要症状是,程序都会长时间的卡在检测字符发送while里,可能是因为不了解RA4E1芯片底层吧。

显示主要是使用uart串口输出。ADC信号使用简易信号源,检测如下:

 直接连接ADC pin —— GND  输出比较平稳,偶尔出现0.001xxxV的输出,而且这是单次的测量,说明ADC的滤波做的很不错,个人感觉和TI的差距不大,当然TI的会好那么一丢丢,价格那也是杠杠地,这点真是对TI的MCU没辙。  这是测试1.5V信号的输出,感觉也是很稳定的,而且精度也很高。

后记:

这一阶段测试RA4E1很是辛苦,主要是瑞萨的产品国内用的人较少,案例也不是很多。而且还碰到了printf和芯片配置的坑,耽误了不少时间。不过整体还算顺利。

最新回复

对焊接了32.768的,但他做的短接点没有接上,看我的贴子。https://bbs.eeworld.com.cn/thread-1251469-1-1.html#pid3250031   详情 回复 发表于 2023-8-1 18:04
点赞 关注

回复
举报

7671

帖子

2

TA的资源

五彩晶圆(高级)

沙发
 

这板子风格和lpcexpresso有点像啊

 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 

回复

250

帖子

5

TA的资源

纯净的硅(初级)

板凳
 

因为RTC晶振没焊接,导致其过不去RTC时钟初始化

点评

谢谢,我试试,是修改代码还是修改配置,我对比过开发板和芯片的时钟设置,配置是一样的 [attachimg]719364[/attachimg]    详情 回复 发表于 2023-7-31 14:13
 
 
 

回复

2942

帖子

4

TA的资源

五彩晶圆(中级)

4
 
流行科技 发表于 2023-7-31 13:50 因为RTC晶振没焊接,导致其过不去RTC时钟初始化

谢谢,我试试,是修改代码还是修改配置,我对比过开发板和芯片的时钟设置,配置是一样的

 

点评

可以修改代码,可以从硬件上改下,短接上即可。  详情 回复 发表于 2023-7-31 15:09
 
 
 

回复

250

帖子

5

TA的资源

纯净的硅(初级)

5
 
bigbat 发表于 2023-7-31 14:13 谢谢,我试试,是修改代码还是修改配置,我对比过开发板和芯片的时钟设置,配置是一样的  

可以修改代码,可以从硬件上改下,短接上即可。

点评

我查过板子Y1,应该是焊上的,X1没有焊,Y1应该是32.768K的那个晶振吧  详情 回复 发表于 2023-7-31 17:07
 
 
 

回复

2942

帖子

4

TA的资源

五彩晶圆(中级)

6
 
流行科技 发表于 2023-7-31 15:09 可以修改代码,可以从硬件上改下,短接上即可。

我查过板子Y1,应该是焊上的,X1没有焊,Y1应该是32.768K的那个晶振吧

点评

对焊接了32.768的,但他做的短接点没有接上,看我的贴子。https://bbs.eeworld.com.cn/thread-1251469-1-1.html#pid3250031  详情 回复 发表于 2023-8-1 18:04
 
 
 

回复

250

帖子

5

TA的资源

纯净的硅(初级)

7
 
bigbat 发表于 2023-7-31 17:07 我查过板子Y1,应该是焊上的,X1没有焊,Y1应该是32.768K的那个晶振吧

对焊接了32.768的,但他做的短接点没有接上,看我的贴子。https://bbs.eeworld.com.cn/thread-1251469-1-1.html#pid3250031

点评

看到了,是没有连接上,那代码怎么修改,可以跑通呢?或者怎么修改设置  详情 回复 发表于 2023-8-1 18:16
 
 
 

回复

2942

帖子

4

TA的资源

五彩晶圆(中级)

8
 
流行科技 发表于 2023-8-1 18:04 对焊接了32.768的,但他做的短接点没有接上,看我的贴子。https://bbs.eeworld.com.cn/thread-1251469-1-1 ...

看到了,是没有连接上,那代码怎么修改,可以跑通呢?或者怎么修改设置

 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表