3744|8

182

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

【复旦微FM33LC046N评测】+ 部分外设的使用 [复制链接]

  本帖最后由 chrisrh 于 2021-3-25 16:55 编辑

1.使用串口printf输出结果

//user_init.c----->Uart_printf
PA13---->Uart0_RX
PA14---->Uart0_TX

把user_init.c中的宏定义#ifndef MFANG去掉便可以使用printf

如果还不行就在options中勾选MicroLIB退出软件重新编译


 

2.使用PC9---->ADC_IN0采集电压

参照例程进行ADC配置

<1>配置FL_ADC_CommonInit---ADC共用寄存器设置以配置外设工作时钟

<2>进行相应GPIO和ADC的初始化

<3>配置完成后进行FL_ADC_Init();

<4>调用GetSingleChannelVoltage_POLL(FL_ADC_EXTERNAL_CH0)查看ADC采样值

若设置ADC中断则通过GetSingleChannelVoltage_IT(FL_ADC_EXTERNAL_CH0)查看采样值

详细ADC介绍见附件 FM33LC0xx-ADC应用说明.pdf (748.28 KB, 下载次数: 13)


 

3.配置RTC时钟,读取RTC时间

<1>进行RTC配置

在进行RTC Initialization初始化配置时,年、月、日、周、时、分、秒的初始化赋值均为16进制写入;

读取到的RTC时间也为16进制数。

/**
  * @brief  RTC Initialization function
  * @param  void
  * @retval None
  */
void MF_RTC_Init(uint8_t year,uint8_t month,uint8_t day,uint8_t week,uint8_t hour,uint8_t minute,uint8_t second)
{

    /*IO CONFIG*/
    FL_RTC_InitTypeDef    defaultInitStruct;

    defaultInitStruct.year 	 = year;  //0x21;
    defaultInitStruct.month  = month; //0x03;
    defaultInitStruct.day 	 = day;   //0x25;
    defaultInitStruct.week 	 = week;  //0x03;
    defaultInitStruct.hour 	 = hour;  //0x09;
    defaultInitStruct.minute = minute;//0x30;
    defaultInitStruct.second = second;//0x00;

    FL_RTC_Init(RTC,&defaultInitStruct );    
}

 

<2>将RTC的时间读出到RAM

void RTC_Read(void)
{
	FL_RTC_InitTypeDef 	 GetTime;
    //将RTC模块的时间 读出到ram
	RTC_GetRTC(&GetTime);
	GUI_ShowString(0,0,"20",16,1);
	GUI_ShowNum(16,0,dec_to_hex(GetTime.year),2,16,1);
	GUI_ShowCHinese(32,0,16,"年",1);
	GUI_ShowNum(48,0,dec_to_hex(GetTime.month),2,16,1);
	GUI_ShowCHinese(64,0,16,"月",1);
	GUI_ShowNum(80,0,dec_to_hex(GetTime.day),2,16,1);
	GUI_ShowCHinese(96,0,16,"日",1);
	GUI_ShowCHinese(32,16,16,"星期",1);
	GUI_ShowNum(64,16,dec_to_hex(GetTime.week),2,16,1);
	GUI_ShowCHinese(0,32,16,"时间",1);
	GUI_ShowString(32,32,":",16,1);
	GUI_ShowNum(40,32,dec_to_hex(GetTime.hour),2,16,1);
	GUI_ShowString(56,32,":",16,1);
	GUI_ShowNum(64,32,dec_to_hex(GetTime.minute),2,16,1);
	GUI_ShowString(80,32,":",16,1);
	GUI_ShowNum(88,32,dec_to_hex(GetTime.second),2,16,1);
}

<3>丰富的RTC中断处理函数,可配置相应的函数

// RTC中断处理函数
void RTC_IRQHandler(void)
{
    //闹钟中断
    if(ENABLE == FL_RTC_IsEnabledIT_Alarm(RTC) &&
         SET == FL_RTC_IsActiveFlag_Alarm(RTC))//查询标志是否置起
    { FL_RTC_ClearFlag_Alarm(RTC);  }          //清除中断标志
    
    //1KHz中断
	if(ENABLE == FL_RTC_IsEnabledIT_1KHz(RTC) &&
		 SET == FL_RTC_IsActiveFlag_1KHz(RTC))//查询标志是否置起
	{ FL_RTC_ClearFlag_1KHz(RTC);   }	      //清除中断标志 
    
    //256Hz中断
	if(ENABLE == FL_RTC_IsEnabledIT_256Hz(RTC) &&
		 SET == FL_RTC_IsActiveFlag_256Hz(RTC))//查询标志是否置起
	{ FL_RTC_ClearFlag_256Hz(RTC);	}	       //清除中断标志
 
    //64Hz中断
	if(ENABLE == FL_RTC_IsEnabledIT_64Hz(RTC) &&
		 SET == FL_RTC_IsActiveFlag_64Hz(RTC))//查询标志是否置起
	{ FL_RTC_ClearFlag_64Hz(RTC);	}	    //清除中断标志
	
    //16Hz中断
	if(ENABLE == FL_RTC_IsEnabledIT_16Hz(RTC) &&
		 SET == FL_RTC_IsActiveFlag_16Hz(RTC))//查询标志是否置起
	{ FL_RTC_ClearFlag_16Hz(RTC);	}	    //清除中断标志

    //8Hz中断
	if(ENABLE == FL_RTC_IsEnabledIT_8Hz(RTC) &&
		 SET == FL_RTC_IsActiveFlag_8Hz(RTC))//查询标志是否置起
	{ FL_RTC_ClearFlag_8Hz(RTC);	}	    //清除中断标志

    //4Hz中断
	if(ENABLE == FL_RTC_IsEnabledIT_4Hz(RTC) &&
		 SET == FL_RTC_IsActiveFlag_4Hz(RTC))//查询标志是否置起
	{ FL_RTC_ClearFlag_4Hz(RTC);	}	    //清除中断标志
    
    //2Hz中断
	if(ENABLE == FL_RTC_IsEnabledIT_2Hz(RTC) &&
		 SET == FL_RTC_IsActiveFlag_2Hz(RTC))//查询标志是否置起
	{ FL_RTC_ClearFlag_2Hz(RTC);	}	    //清除中断标志
    
    // 秒中断
	if(ENABLE == FL_RTC_IsEnabledIT_Second(RTC) &&
		 SET == FL_RTC_IsActiveFlag_Second(RTC))//查询标志是否置起
	{ FL_RTC_ClearFlag_Second(RTC);	}      //清除中断标志   

    // 分钟中断
	if(ENABLE == FL_RTC_IsEnabledIT_Minute(RTC) &&
		 SET == FL_RTC_IsActiveFlag_Minute(RTC))//查询标志是否置起
	{ FL_RTC_ClearFlag_Minute(RTC);	}	  //清除中断标志

    // 小时中断
	if(ENABLE == FL_RTC_IsEnabledIT_Hour(RTC) &&
		 SET == FL_RTC_IsActiveFlag_Hour(RTC))//查询标志是否置起
	{ FL_RTC_ClearFlag_Hour(RTC);	}	//清除中断标志

    // 天中断
	if(ENABLE == FL_RTC_IsEnabledIT_Day(RTC) &&
		 SET == FL_RTC_IsActiveFlag_Day(RTC))//查询标志是否置起
	{ FL_RTC_ClearFlag_Day(RTC);	}	//清除中断标志  
}

 


 

4.揉合了一版使用过的程序

上电后进入while循环OLED显示RTC时钟走时
//key1中断进入PWM_LED呼吸灯
//key4中断进入ADC_IN0采集电压

FM33LC046N用着不错,

还没用RTOS,程序写的不好仅供参考,见附件···

 

TIM_SPI_KEY_ADC_RTC_OLED.zip

5.78 MB, 下载次数: 37

最新回复

下载学习一下 ,谢谢楼主  详情 回复 发表于 2023-5-5 19:53

赞赏

1

查看全部赞赏

点赞(1) 关注
 
 

回复
举报

6828

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

看FM33LC046配置RTC时钟和读取RTC时间一点不复杂

 
 
 

回复

2万

帖子

71

TA的资源

管理员

板凳
 

楼主可以谈谈使用上的感受,建议等。

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

4
 

谢谢分享,期待后续!

个人签名

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

 
 
 

回复

1942

帖子

2

TA的资源

版主

5
 

代码是否容易理解?操作是否容易?

点评

代码注释都挺全的,比较容易上手;函数库封装的和103类似,配置外设属于同样的思路,部分外设使用起来较103更好配置,总之很好用  详情 回复 发表于 2021-3-30 11:50
 
 
 

回复

182

帖子

1

TA的资源

一粒金砂(高级)

6
 
w494143467 发表于 2021-3-26 14:54 代码是否容易理解?操作是否容易?

代码注释都挺全的,比较容易上手;函数库封装的和103类似,配置外设属于同样的思路,部分外设使用起来较103更好配置,总之很好用

点评

听到这个,感觉这个代码还是非常不错的!  详情 回复 发表于 2021-3-31 12:47
 
 
 

回复

1942

帖子

2

TA的资源

版主

7
 
chrisrh 发表于 2021-3-30 11:50 代码注释都挺全的,比较容易上手;函数库封装的和103类似,配置外设属于同样的思路,部分外设使用起来较1 ...

听到这个,感觉这个代码还是非常不错的!

 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

8
 

下载学习一下 ,谢谢楼主

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
下载学习一下 ,谢谢楼主
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表