2回答

2收藏

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

GD32 GD32 5738 人阅读 | 2 人回复 | 2017-04-27

本帖最后由 杨肉师傅 于 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 (57.23 KB, 下载次数: 67)

官方例程.png

官方例程结构.png (28.21 KB, 下载次数: 71)

官方例程结构.png

自己建一个工程.png (20.43 KB, 下载次数: 72)

自己建一个工程.png

自己建一个工程.png (20.43 KB, 下载次数: 80)

自己建一个工程.png

缺少头文件.png (21.42 KB, 下载次数: 67)

缺少头文件.png

头文件路径.png (116.16 KB, 下载次数: 78)

头文件路径.png

成功编译.png (19.06 KB, 下载次数: 71)

成功编译.png

GD32F450xx_Datasheet_Rev1.1.pdf

1.32 MB, 下载次数: 16

数据手册

1,temp.rar

1.09 MB, 下载次数: 36

工程模板

分享到:
回复

使用道具 举报

回答|共 2 个

倒序浏览

沙发

杨肉师傅

发表于 2017-4-27 22:49:38 | 只看该作者

为什么别人发的贴图片在文字后面,我发的图片全在后头
板凳

杨肉师傅

发表于 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 下一条