chrisrh 发表于 2021-3-25 16:57

【复旦微FM33LC046N评测】+ 部分外设的使用

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

<p><span style="color:#c0392b;"><strong>1.使用串口printf输出结果</strong></span></p>

<p>//user_init.c-----&gt;Uart_printf<br />
PA13----&gt;Uart0_RX<br />
PA14----&gt;Uart0_TX</p>

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

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

<p></p>

<hr />
<p>&nbsp;</p>

<p><span style="color:#c0392b;"><strong>2.使用PC9----&gt;ADC_IN0采集电压</strong></span></p>

<p></p>

<p>参照例程进行ADC配置</p>

<p>&lt;1&gt;配置FL_ADC_CommonInit---ADC共用寄存器设置以配置外设工作时钟</p>

<p>&lt;2&gt;进行相应GPIO和ADC的初始化</p>

<p>&lt;3&gt;配置完成后进行FL_ADC_Init();</p>

<p>&lt;4&gt;调用GetSingleChannelVoltage_POLL(FL_ADC_EXTERNAL_CH0)查看ADC采样值</p>

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

<p>详细ADC介绍见附件</p>

<p></p>

<hr />
<p>&nbsp;</p>

<p><span style="color:#c0392b;"><strong>3.配置RTC时钟,读取RTC时间</strong></span></p>

<p></p>

<p>&lt;1&gt;进行RTC配置</p>

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

<p>读取到的RTC时间也为16进制数。</p>

<pre>
<code class="language-cpp">/**
* <a href="home.php?mod=space&amp;uid=159083" target="_blank">@brief</a>RTC Initialization function
* @paramvoid
* @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,&amp;defaultInitStruct );   
}</code></pre>

<hr />
<p>&nbsp;</p>

<p>&lt;2&gt;将RTC的时间读出到RAM</p>

<pre>
<code class="language-cpp">void RTC_Read(void)
{
        FL_RTC_InitTypeDef        GetTime;
    //将RTC模块的时间 读出到ram
        RTC_GetRTC(&amp;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);
}</code></pre>

<p>&lt;3&gt;丰富的RTC中断处理函数,可配置相应的函数</p>

<pre>
<code class="language-cpp">// RTC中断处理函数
void RTC_IRQHandler(void)
{
    //闹钟中断
    if(ENABLE == FL_RTC_IsEnabledIT_Alarm(RTC) &amp;&amp;
         SET == FL_RTC_IsActiveFlag_Alarm(RTC))//查询标志是否置起
    { FL_RTC_ClearFlag_Alarm(RTC);}          //清除中断标志
   
    //1KHz中断
        if(ENABLE == FL_RTC_IsEnabledIT_1KHz(RTC) &amp;&amp;
               SET == FL_RTC_IsActiveFlag_1KHz(RTC))//查询标志是否置起
        { FL_RTC_ClearFlag_1KHz(RTC);   }              //清除中断标志
   
    //256Hz中断
        if(ENABLE == FL_RTC_IsEnabledIT_256Hz(RTC) &amp;&amp;
               SET == FL_RTC_IsActiveFlag_256Hz(RTC))//查询标志是否置起
        { FL_RTC_ClearFlag_256Hz(RTC);        }             //清除中断标志

    //64Hz中断
        if(ENABLE == FL_RTC_IsEnabledIT_64Hz(RTC) &amp;&amp;
               SET == FL_RTC_IsActiveFlag_64Hz(RTC))//查询标志是否置起
        { FL_RTC_ClearFlag_64Hz(RTC);        }          //清除中断标志
       
    //16Hz中断
        if(ENABLE == FL_RTC_IsEnabledIT_16Hz(RTC) &amp;&amp;
               SET == FL_RTC_IsActiveFlag_16Hz(RTC))//查询标志是否置起
        { FL_RTC_ClearFlag_16Hz(RTC);        }          //清除中断标志

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

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

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

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

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

<p></p>

<p>&nbsp;</p>

<hr />
<p>&nbsp;</p>

<p><span style="color:#c0392b;"><strong>4.</strong></span><span style="color:#c0392b;"><strong>揉合了一版使用过的程序</strong></span></p>

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

<p></p>

<p><span style="color:#c0392b;"><strong>FM33LC046N用着不错,</strong></span></p>

<p>还没用RTOS,程序写的不好仅供参考,见附件&middot;&middot;&middot;</p>

<p>&nbsp;</p>

Jacktang 发表于 2021-3-25 18:21

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

soso 发表于 2021-3-26 09:05

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

freebsder 发表于 2021-3-26 14:04

<p>谢谢分享,期待后续!</p>

w494143467 发表于 2021-3-26 14:54

<p>代码是否容易理解?操作是否容易?</p>

chrisrh 发表于 2021-3-30 11:50

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

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

w494143467 发表于 2021-3-31 12:47

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

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

szmqdzkj 发表于 2022-1-4 17:02

<p>下载学习一下 ,谢谢楼主</p>

milkreen 发表于 2023-5-5 19:53

下载学习一下 ,谢谢楼主
页: [1]
查看完整版本: 【复旦微FM33LC046N评测】+ 部分外设的使用