复旦微FM33LG025单片机PWM信号输出

        最近项目用到了复旦微的FM33LG025单片机,这是我第一次使用复旦微单片机,以下通过一个输出PWM信号的工程为例,码点文字记录一下学习过程和遇到的坑。

1、新建工程

       复旦微提供了一个线上的芯片应用、配置工具——MFang,读作“魔方”。使用MFang不需要下载和安装,更不需要破解和激活,打开浏览器即可在线操作所有数据实时云端存储。这个工具跟ST的STM32CubeMX类似,只不过MFang是网页版,STM32CubeMX是安装版。

       废话不多说,我们进入实操环节。

       首先打开MFang,链接如下:https://mfang2.fmdevelopers.com.cn/

       进入工作区,如下图所示:

        点击“新建”→“新建工程”创建一个新工程,注意芯片型号要选对,FL驱动库我们选择最新版V2.3,选择“空白工程”后点击“确定”按钮即可,如下图所示:

2、配置工程 

      接着就来到了工程配置界面,如下图所示。

       点击上图右上角的“时钟配置”进入时钟配置页面,如下图所示:

       我使用的是外部晶振,配置时钟分为以下三步,1、打开XTHF;2、填写晶振频率,我用的是16MHz,填16;3、在SYSCLK Mux(多路时钟选择器)中选择XTHF为系统时钟。配置完记得点击“保存”按钮!

       接着退出来,回到工程配置主界面,先配置下载接口,在System中找到SWD,然后把SWD的开关置位ON,如果没打开这个开关是否默认为JTAG?谁试过了可以告诉我! 

 

        然后按照下图的7个步骤配置通用定时器1,功能是在PC0引脚输出一个周期为10ms,占空比为50%的PWM信号。

 

 3、生成工程代码

       点击工程配置主界面右上角的“下载工程”按钮,弹出如下窗口,工程名默认即可,我们选择生成一个ARM-MDK工程,然后直接点击“下载”按钮即可生成并下载工程代码压缩包。

4、运行与调试

       将工程代码压缩包解压后,双击打开KEIL工程。接下来我们看一下自动生成的代码,首先是main()函数,如下:

int main(void)
{
    /* Initialize FL Driver Library */
    FL_Init();

    /* Configure the system clock */
    MF_Clock_Init();
    
   
    /* Initialize all configured peripherals */
    MF_Config_Init();

    while(1)
    {     

    }

}

          外设配置在MF_Config_Init()函数中,以下截取几个关键函数:

void MF_Config_Init(void)
{
    /* Initial GPTIM1 */
    MF_GPTIM1_TimerBase_Init();
    MF_GPTIM1_FL_GPTIM_CHANNEL_1_Channel1_Init();
    FL_GPTIM_Enable(GPTIM1);     // 启动GPTIM1定时器

    /* Initial SWD */
    MF_SWD_IO_Init();
}

void MF_GPTIM1_TimerBase_Init(void)
{
    FL_GPTIM_InitTypeDef    TimerBase_InitStruct;

    TimerBase_InitStruct.prescaler = 159;
    TimerBase_InitStruct.counterMode = FL_GPTIM_COUNTER_DIR_UP;
    TimerBase_InitStruct.autoReload = 999; 
    TimerBase_InitStruct.clockDivision = FL_GPTIM_CLK_DIVISION_DIV1;
    TimerBase_InitStruct.autoReloadState = FL_ENABLE;

    FL_GPTIM_Init(GPTIM1, &TimerBase_InitStruct);    
}

void MF_GPTIM1_FL_GPTIM_CHANNEL_1_Channel1_Init(void)
{
    FL_GPIO_InitTypeDef    GPIO_InitStruct;

    FL_GPTIM_OC_InitTypeDef    GPTIM1_InitStruct;

    /* PC0 GPTIM1_CH1 */ 
    GPIO_InitStruct.pin = FL_GPIO_PIN_0;
    GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
    GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.pull = FL_DISABLE;
    GPIO_InitStruct.remapPin = FL_DISABLE;
    GPIO_InitStruct.analogSwitch = FL_DISABLE;
    FL_GPIO_Init(GPIOC, &GPIO_InitStruct);

    GPTIM1_InitStruct.OCMode = FL_GPTIM_OC_MODE_PWM1;
    GPTIM1_InitStruct.OCETRFStatus = FL_DISABLE;
    GPTIM1_InitStruct.OCFastMode = FL_DISABLE;
    GPTIM1_InitStruct.compareValue = 500;
    GPTIM1_InitStruct.OCPolarity = FL_GPTIM_OC_POLARITY_NORMAL;
    GPTIM1_InitStruct.OCPreload = FL_DISABLE;

    FL_GPTIM_OC_Init(GPTIM1, FL_GPTIM_CHANNEL_1, &GPTIM1_InitStruct);    
}

        注意,自动生成的代码只有GPTIM1定时器的初始化配置,定时器并未打开,需要我们手动增加启动定时器函数FL_GPTIM_Enable(GPTIM1),如上图,我将其放在了MF_Config_Init()函数的定时器配置语句后面。FL_GPTIM_Enable()是一个FL库函数,可以在fm33lg0xx_fl_gptim.h文件中找到。

       接下来开始调试代码,点击“Start/Stop Debug Session”按钮启动调试,发现代码无法运行,如下图所示。

        这个问题足足折腾了我一个下午,后来发现重新选择一下芯片就可以了,可以说巨坑无比,难道官方没有发现这个问题吗?

        我们重新配置一下工程,首先进入Device窗口,先选择FM33LG01X,再重新选回FM33LG02X。

         再去Target窗口将时钟改为16MHz。

        再去Debug窗口选择正确的烧录器,我用的是J-LINK。

        最后将下载口选择为SW。

         然后重新Debug,如下图,可以看到代码已经能正常运行了。

以下是输出波形:

 

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FM33G0xx的主要特性如下:  宽电压范围: 1.8~5.5V  工作温度范围: -40℃~+85℃  处理器内核  ARM Cortex-M0+  支持用户/特权模式  支持中断向量表重定向(VTOR)  最高40MHz主频  SWD调试接口  低功耗技术平台  典型运行功耗180uA/MHz  32KHz下LPRUN功耗: 15uA  Sleep模式下带LCD显示: 6uA  DeepSleep模式, RTC走时+24KB RAM保持+CPU内核保持: 1.2uA  RTC Backup模式, RTC走时+512字节备份寄存器, 0.9uA  存储器  128/256KB Flash空间  Flash擦写寿命: >20,000次  Flash数据保存时间: 10年@85℃  用户代码保护  24KB RAM空间  最大支持73个GPIO,最多24个外部引脚中断, 最多8个异步唤醒引脚  丰富的模拟外设  高可靠、可配置BOR电路(支持4级可编程下电复位阈值)  超低功耗PDR电路(支持4级可编程下电复位阈值)  可编程电源监测模块(SVD)  2x低功耗模拟比较器  11-bit低功耗∑-△ADC,最大支持9个外部通道  高精度温度传感器,精度优于+/-2℃  通信接口  UART*6  7816智能卡接口*2  SPI*3,主从模式  I2C*1, 主机400K  7通道外设DMA  可编程CRC校验模块  定时资源  8-bit基本定时器*4  16-bit扩展定时器*4  16-bit通用定时器*1  24-bit Systick*1  16-bit低功耗定时器*1,可在休眠模式下工作  带窗口的CPU看门狗定时器*1  系统看门狗定时器*1  低功耗实时时钟日历(RTCC),带有数字调校功能, 最高调校精度+/-0.06ppm
复旦FM17550是一种硬件设计,它是为了满足特定需求而设计的一款型电子设备。复旦FM17550硬件设计采用了先进的技术和工艺,具有高性能和可靠性。 复旦FM17550硬件设计的主要特点包括:一、小巧便携,体积小且重量轻,可以方便地携带和使用;二、高性能的处理器和大容量的存储器,可以处理和存储大量的数据;三、丰富的接口和通信功能,可以与其他设备进行连接和交互;四、稳定可靠的电源和电路设计,可以保证设备的正常工作和长久使用。 复旦FM17550硬件设计的应用领域广泛,可以应用于物联网、智能家居、智能医疗、智能交通等领域。在物联网领域,复旦FM17550可以作为终端设备,与其他设备进行通信和数据传输,实现信息的采集和监控。在智能家居领域,复旦FM17550可以作为控制中心,与各种家居设备进行连接和控制,实现智能化的家居管理。在智能医疗领域,复旦FM17550可以用于医疗设备的控制和数据管理,提高医疗服务的效率和质量。在智能交通领域,复旦FM17550可以应用于交通信号控制和车辆管理等方面,提升交通系统的智能化水平。 总之,复旦FM17550硬件设计是一种高性能、可靠性强且具有广泛应用领域的型电子设备,将在物联网、智能家居、智能医疗、智能交通等领域发挥重要作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值