【瑞萨RA2L1入门学习】+OLED显示RTC时钟实验
在给的资料包找到以下安装包和实例文件,标红的是带有fsp的e2s,当然也可以先安装e2s然后安装FSP支持包;
将实例放到设定的工作空间,会看到如下:
第一个是我新建的工程,步骤如下:
接着:
新建保存路径:
在接下来的界面选择芯片:R7FA2L1AB2DFL;
选择工程模板:
点击xml可以进入设置stacks界面:
先配置IIC:
点击Stacks->New Stack->Driver->Connectivity->I2C Master Driver on r_iic_master。
设置IIC的配置,需要注意从机的地址,在STM32等程序中写的是0x78,但是这里的地址位数是7位,故需要右移一位,变成0x3c。
要注意如何设置标红的对话栏,需要设置回调函数名等;
为简化实验,可以先利用实例文件中的OLED工程,拷贝oledfont.h、oled.c、oled.h到自己新建工程的src文件夹下;用鼠标右键选择工程,再进行构建项目,发现有错误,是拷贝工程内还有RTC,于是继续新建stacks:RTC;点击Stacks->New Stack->Driver->Timers -> RTC Driver on r_rtc。
配置RTC:
12864OLED中,最开始需要对OLED进行初始化,代码如下。
void WriteCmd(void)
{
uint8_t i = 0;
uint8_t ii[2]={0x00,0x00};
for(i=0;i<27;i++)
{ii[1]=CMD_Data;
err = R_IIC_MASTER_Write(&g_i2c_master0_ctrl, ii, 0x02, true);
assert(FSP_SUCCESS == err);
/* Since there is nothing else to do, block until Callback triggers*/
while ((I2C_MASTER_EVENT_TX_COMPLETE != i2c_event) && timeout_ms>0)
{R_BSP_SoftwareDelay(1U, BSP_DELAY_UNITS_MICROSECONDS);
timeout_ms--;}
if (I2C_MASTER_EVENT_ABORTED == i2c_event)
{__BKPT(0);}
/* Read data back from the I2C slave */
i2c_event = I2C_MASTER_EVENT_ABORTED;
timeout_ms = 100;
}
}
当然也有其他方法,比如使用IO口模拟IIC协议的实现方式来进行CMD命令写入或者数据写入。向设备写控制命令
void OLED_WR_CMD(uint8_t cmd)
{
uint8_t ii[2]={0x00,0x00};
ii[1]=cmd;
err = R_IIC_MASTER_Write(&g_i2c_master0_ctrl, ii, 0x02, true);
assert(FSP_SUCCESS == err);
/* Since there is nothing else to do, block until Callback triggers*/
//while ((I2C_MASTER_EVENT_TX_COMPLETE != i2c_event) && timeout_ms)
while ((I2C_MASTER_EVENT_TX_COMPLETE != i2c_event) && timeout_ms>0)
{
R_BSP_SoftwareDelay(1U, BSP_DELAY_UNITS_MICROSECONDS);
timeout_ms--;
}
if (I2C_MASTER_EVENT_ABORTED == i2c_event)
{
__BKPT(0);
}
/* Read data back from the I2C slave */
i2c_event = I2C_MASTER_EVENT_ABORTED;
timeout_ms = 100;
}
向设备写数据
void OLED_WR_DATA(uint8_t data)
{
uint8_t ii[2]={0x40,0x00};
ii[1]=data;
err = R_IIC_MASTER_Write(&g_i2c_master0_ctrl, ii, 0x02, true);
assert(FSP_SUCCESS == err);
/* Since there is nothing else to do, block until Callback triggers*/
while ((I2C_MASTER_EVENT_TX_COMPLETE != i2c_event) && timeout_ms>0)
{
R_BSP_SoftwareDelay(1U, BSP_DELAY_UNITS_MICROSECONDS);
timeout_ms--;
}
if (I2C_MASTER_EVENT_ABORTED == i2c_event)
{
__BKPT(0);
}
/* Read data back from the I2C slave */
i2c_event = I2C_MASTER_EVENT_ABORTED;
timeout_ms = 100;
}
在移植过程中,需要添加三个文件,其中oledfont.h放入需要显示的数据,oled.c是驱动文件,oled.h是头文件。最后需要在hal_entry.c中修改void hal_entry(void)函数:
void hal_entry(void)
{
/* TODO: add your own code here */
/* Initialize the RTC module*/
err = R_RTC_Open(&g_rtc0_ctrl, &g_rtc0_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
/* R_RTC_CalendarTimeSet must be called at least once to start the RTC */
R_RTC_CalendarTimeSet(&g_rtc0_ctrl, &set_time);
/* Set the periodic interrupt rate to 1 second */
R_RTC_PeriodicIrqRateSet(&g_rtc0_ctrl, RTC_PERIODIC_IRQ_SELECT_1_SECOND);
uint8_t rtc_second= 11; //秒
uint8_t rtc_minute =11; //分
uint8_t rtc_hour =11; //时
uint8_t rtc_day =11; //日
uint8_t rtc_month =11; //月
uint16_t rtc_year =121; //年
uint8_t rtc_week =0; //周
rtc_time_t get_time;
/* IIC初始化*/
err = R_IIC_MASTER_Open(&g_i2c_master0_ctrl, &g_i2c_master0_cfg);
assert(FSP_SUCCESS == err);
WriteCmd();//OLED初始化
OLED_Clear();//清屏
OLED_ShowString(16,1,"RA",16);
OLED_ShowCHinese(32,1,3);//生
OLED_ShowCHinese(48,1,4);//态
OLED_ShowCHinese(64,1,5);//工
OLED_ShowCHinese(80,1,6);//作
OLED_ShowCHinese(96,1,7);//室
OLED_ShowCHinese(40,5,0);//年
OLED_ShowCHinese(72,5,1);//月
OLED_ShowCHinese(104,5,2);//日
OLED_ShowString(32,3,"11:11:11",16);
while(1)
{
if(rtc_flag)
{
R_RTC_CalendarTimeGet(&g_rtc0_ctrl, &get_time);//获取RTC计数时间
rtc_flag=0;
rtc_second=get_time.tm_sec;//秒
rtc_minute=get_time.tm_min;//分
rtc_hour=get_time.tm_hour;//时
rtc_day=get_time.tm_mday;//日
rtc_month=get_time.tm_mon;//月
rtc_year=get_time.tm_year; //年
rtc_week=get_time.tm_wday;//周
}
OLED_ShowNum(8,5,rtc_year+1900,4,16);//年
OLED_ShowNum(56,5,rtc_month,2,16);//月
OLED_ShowNum(88,5,rtc_day,2,16);//日
OLED_ShowNum(32,3,rtc_hour,2,16);//时
OLED_ShowNum(56,3,rtc_minute,2,16);//分
OLED_ShowNum(80,3,rtc_second,2,16);//秒
}
再次构建工程:0个错误0个警告
使用过程中jlink出了问题,使用USB转串口进行下载程序,安装软件Renesas_Flash_Programmer;
![]()
在这里设置下载接口选择USB转接口,下载是还要注意要连接上开发板需要按动rst健
最后给出实验效果图:
![]()
0
|
|
|
|