查看: 3462|回复: 0

GD32F450新建工程及点灯

[复制链接]
  • TA的每日心情
    奋斗
    2024-9-22 22:20
  • 签到天数: 944 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2017-4-19 23:43:34 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 9robot 于 2017-4-20 09:20 编辑

           收到板子好几天了,昨天开始学习。本以为之前学习过GD32F207和GD32F190,这次应该是轻车熟路,很顺利就可以上手。结果。。。这次的库函数和上次的风格不一样了,之前虽然和STM32的库有一些差异,但是总体还是很接近的。这次则变化了很多,好在换汤不换药,原理还是一样的。然后开始创建工程,我的习惯是先建立一个模板,证明没有错误后,之后的其他的模块的学习都是在模板上进行。
           结果 昨天晚上折腾了好长时间也没有把等点亮。有点怀疑自己的以往经验了
           1、把必要的源文件、头文件添加进工程,设置路径
           2、开启时钟、比如点灯需要开启GPIO的时钟,当然系统的时钟是默认设置好的。。。这次就例外了,例程提供的采用了外部晶振作为时钟源,而小红板是没有外部晶振的,这个是必须要改的,好在GD32的代码注释还算详细,在system_gd32f4xx.c文件中可以设置。
    1. /* select a system clock by uncommenting the following line */
    2. //#define __SYSTEM_CLOCK_IRC16M                   (uint32_t)(__IRC16M)
    3. //#define __SYSTEM_CLOCK_HXTAL                    (uint32_t)(__HXTAL)
    4. //#define __SYSTEM_CLOCK_120M_PLL_IRC16M          (uint32_t)(120000000)
    5. //#define __SYSTEM_CLOCK_120M_PLL_8M_HXTAL          (uint32_t)(120000000)
    6. //#define __SYSTEM_CLOCK_120M_PLL_25M_HXTAL       (uint32_t)(120000000)
    7. //#define __SYSTEM_CLOCK_168M_PLL_IRC16M          (uint32_t)(168000000)
    8. //#define __SYSTEM_CLOCK_168M_PLL_8M_HXTAL        (uint32_t)(168000000)
    9. //#define __SYSTEM_CLOCK_168M_PLL_25M_HXTAL       (uint32_t)(168000000)
    10. #define __SYSTEM_CLOCK_200M_PLL_IRC16M          (uint32_t)(200000000)
    11. //#define __SYSTEM_CLOCK_200M_PLL_8M_HXTAL        (uint32_t)(200000000)
    12. //#define __SYSTEM_CLOCK_200M_PLL_25M_HXTAL       (uint32_t)(200000000)
    复制代码
    更改后就是上面的样子,注释掉原先的,设置为内部时钟,并且倍频到200M。
           然后编译没有问题,下载到板子上,结果发现没有反应,只有一个LED发出暗暗的弱光。然后在论坛上开始找办法,发现有类似的问题。结果我以为是提供的例程存在共性问题,但是也有人成功点亮LED,那么应该还是我自己的问题。还是好好找找吧。

           void led_init(void){
              rcu_periph_clock_enable(RCU_GPIOB);        
              rcu_periph_clock_enable(RCU_GPIOD);
        /* configure led GPIO port */
        gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_3|GPIO_PIN_4);
        gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3|GPIO_PIN_4);

        GPIO_BC(GPIOB) = GPIO_PIN_3|GPIO_PIN_4;        

        /* configure led GPIO port */
        gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_7);
        gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_7);

        GPIO_BC(GPIOD) = GPIO_PIN_7;
    }
    这部分是LED初始化的代码,本来是很简单的,一直坚信自己不会在这里出问题,但找来找去最后还是定位到这里。都是因为自己的粗心大意,把GPIOD写成了RCU_GPIOD,没有发现,编译也可以通过。。。。。有点阴沟翻船的感觉。把自己的低级错误写出了,希望大家不要犯我这样的错误。仔细检查每行代码,尽快熟悉GD32F450的库函数,把自己建的模板写出来,有问题的话,提提意见。
    IMG_20170419_231222.jpg


    实验现象为。三个LED每隔500ms闪烁一次。


    GD32F450_Template.zip

    308.16 KB, 下载次数: 63

    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-25 22:05 , Processed in 0.129040 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.