查看: 4513|回复: 2

新建工程模板(时钟配置+GD32F450xx_Datasheet+“core_cmInstr.h”)

[复制链接]
  • TA的每日心情
    无聊
    2016-10-8 20:34
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2017-4-27 21:18:19 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 杨肉师傅 于 2017-4-27 22:48 编辑


    板子还没收到,但是五一的时候应该能到,先把资料熟悉下,建立工程模板;
    1
    、看资料和固件库;
    2
    、建立工程;
    3
    、编译及解决问题;
    4
    、总结和发帖;

    1
    、看资料和固件库;
            
    浏览了一遍论坛上下载的资料,没有数据手册,到网上下一个看一下,顺便发在附件里;
    2
    、建立工程;
          
    先打开官方工程模板看一下,不过不能选择Software Packs,自己编译的工程得自己建:
                                                                
    官方的工程结构:

    参照官方的结构自己建立一个工程:

    编写好串口和延时函数,main函数里随便写点:
    1. /*!
    2.    \brief      usb_to_uart_init
    3.    \param[in]  none
    4.    \param[out] none
    5.    \retval     none
    6.    \attention  USART2,tx:PD8,rx:PD9,baud:115200
    7. */
    8. void usb_to_uart_init(void)
    9. {
    10.    /* enable the usart GPIO clock */
    11.    rcu_periph_clock_enable( RCU_GPIOD);
    12.    /* enable USART clock */
    13.    rcu_periph_clock_enable(RCU_USART2);
    14.    /* connect port to USARTx_Tx */
    15.    gpio_af_set(RCU_GPIOD, GPIO_AF_7, GPIO_PIN_8);
    16.    /* connect port to USARTx_Rx */
    17.    gpio_af_set(RCU_GPIOD, GPIO_AF_7, GPIO_PIN_9);

    18.    /* configure USART Tx as alternate function push-pull */
    19.    gpio_mode_set(RCU_GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_8);
    20.    gpio_output_options_set(RCU_GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_8);
    21.    /* configure USART Rx as alternate function push-pull */
    22.    gpio_mode_set(RCU_GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_9);
    23.    gpio_output_options_set(RCU_GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9);

    24.    /* USART configure */
    25.    usart_deinit(USART2);
    26.    usart_baudrate_set(USART2,115200U);
    27.    usart_receive_config(USART2, USART_RECEIVE_ENABLE);
    28.    usart_transmit_config(USART2, USART_TRANSMIT_ENABLE);
    29.    usart_enable(USART2);
    30.    
    31. }

    32. /* retarget the C library printf function to the USART */
    33. int fputc(int ch, FILE *f)
    34. {
    35.     usart_data_transmit(USART2, (uint8_t)ch);
    36.     while(RESET == usart_flag_get(USART2, USART_FLAG_TBE));
    37.     return ch;
    38. }
    复制代码
    1. static uint8_t  fac_us=0;   //us延时倍乘数                           
    2. static uint16_t fac_ms=0;   //ms延时倍乘数
    3. /*!
    4.    \brief      delay_init
    5.    \param[in]  none
    6.    \param[out] none
    7.    \retval     none
    8.    \attention  配置systick,初始化延时函数
    9. */
    10. void delay_init(void)
    11. {
    12.          systick_clksource_set(SYSTICK_CLKSOURCE_HCLK_DIV8);
    13.         fac_us = SystemCoreClock/8000000UL;   // 延时1us需要的systick时钟数   
    14.         fac_ms = (uint16_t)fac_us*1000;           // 延时1ms需要的systick时钟数   
    15. }        
    16. /*!
    17.    \brief      delay_us
    18.    \param[in]  nus:需要延时的us数
    19.    \param[out] none
    20.    \retval     none
    21.    \attention  us延时函数,注意nus的值不要大于118481us(最大值即2^24/fac_us即120 000 000 / 15)
    22. */
    23. void delay_us(uint32_t nus)
    24. {               
    25.         uint32_t temp;                     
    26.         SysTick->LOAD=nus*fac_us;                                 //时间加载                           
    27.         SysTick->VAL=0x00;                                        //清空计数器
    28.         SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //开始倒数         
    29.         do
    30.         {
    31.                 temp=SysTick->CTRL;
    32.         }while((temp&0x01)&&!(temp&(1<<16)));        //等待时间到达   
    33.         SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭计数器
    34.         SysTick->VAL =0X00;                                       //清空计数器
    35. }
    36. /*!
    37.    \brief      delay_ms
    38.    \param[in]  nms:需要延时的ms数
    39.    \param[out] none
    40.    \retval     none
    41.    \attention  ms延时函数,最大大约1118ms
    42. */
    43. void delay_ms(uint16_t nms)
    44. {                                    
    45.         uint32_t temp;                  
    46.         SysTick->LOAD=(uint32_t)nms*fac_ms;                        //时间加载(SysTick->LOAD为24bit)
    47.         SysTick->VAL =0x00;                                   //清空计数器
    48.         SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          //开始倒数
    49.         do
    50.         {
    51.                 temp=SysTick->CTRL;
    52.         }while((temp&0x01)&&!(temp&(1<<16)));        //等待时间到达   
    53.         SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       //关闭计数器
    54.         SysTick->VAL =0X00;                                       //清空计数器                     
    55. }
    复制代码
    1. /*!
    2.     \brief      main function
    3.     \param[in]  none
    4.     \param[out] none
    5.     \retval     none
    6. */
    7. int main(void)
    8. {

    9.    delay_init();
    10.    usb_to_uart_init();
    11.    
    12.    while (1)
    13.    {
    14.       static uint8_t i;
    15.       printf("--%3d--\r\n",i++);
    16.    }
    17. }
    复制代码
    3、编译及解决问题;
    编译,缺少core_cmInstr.h的话:

    到keil的安装目录找到ARM的CMSIS头文件,全部复制到工程里,管他有用没用都复制过来:

    再编译就没用问题了:

    4、总结和发帖;
    编译通过了,还没测试,看了网友的一些帖子,坐等板子到来;
    官方例程.png
    官方例程结构.png
    自己建一个工程.png
    自己建一个工程.png
    缺少头文件.png
    头文件路径.png
    成功编译.png

    GD32F450xx_Datasheet_Rev1.1.pdf

    1.32 MB, 下载次数: 16

    数据手册

    1,temp.rar

    1.09 MB, 下载次数: 36

    工程模板

    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2016-10-8 20:34
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

     楼主| 发表于 2017-4-27 22:49:38 | 显示全部楼层
    为什么别人发的贴图片在文字后面,我发的图片全在后头
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-10-8 20:34
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

     楼主| 发表于 2017-5-4 12:37:12 | 显示全部楼层
    板子到手,测试的时候发现串口初始化的时候,函数参数用错了,从前面复制的端口复制成RCC通道了,修改如下:
    1. /*!
    2.    \brief      usb_to_uart_init
    3.    \param[in]  none
    4.    \param[out] none
    5.    \retval     none
    6.    \attention  USART2,tx:PD8,rx:PD9,baud:115200
    7. */
    8. void usb_to_uart_init(void)
    9. {
    10.    /* enable GPIO clock */   
    11.    rcu_periph_clock_enable(RCU_GPIOD);
    12.    /* enable USART clock */
    13.    rcu_periph_clock_enable(RCU_USART2);
    14.    /* connect port to USARTx_Tx */
    15.    gpio_af_set(GPIOD, GPIO_AF_7, GPIO_PIN_8);
    16.    /* connect port to USARTx_Rx */
    17.    gpio_af_set(GPIOD, GPIO_AF_7, GPIO_PIN_9);
    18.    /* configure USART Tx as alternate function push-pull */
    19.    gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_8);
    20.    gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_8);
    21.    /* configure USART Rx as alternate function push-pull */
    22.    gpio_mode_set(GPIOD, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_9);
    23.    gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_9);
    24.    
    25.    /* USART configure */
    26.    usart_deinit(USART2);
    27.    usart_baudrate_set(USART2, 115200U);
    28.    usart_receive_config(USART2, USART_RECEIVE_ENABLE);
    29.    usart_transmit_config(USART2, USART_TRANSMIT_ENABLE);
    30.    usart_word_length_set(USART2, USART_WL_8BIT);
    31.    usart_stop_bit_set(USART2, USART_STB_1BIT);
    32.    usart_parity_config(USART2, USART_PM_NONE);
    33.    usart_enable(USART2);

    34. }
    复制代码
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-5-20 07:28 , Processed in 0.119914 second(s), 20 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.