精华内容
下载资源
问答
  • Version: 2.0.0 (2019-03-11) GigaDevice.GD32F4xx_DFP.2.0.0.pack Update firmware. Version: 1.0.4 (2018-11-11) GigaDevice.GD32F4xx_DFP.1.0.4.pack Update firmware.
  • Free RTOS GD32F4XX

    2020-12-16 10:33:20
    GigaDevice Free RTOS 移植成功, 在 GD32F4RE 跑过实际项目。 STM32 的FreeRTOS 比较多, 但是 GD32 不多, 这是实际项目中使用的可以正常使用, 我用了很大的精力搞定,请珍惜
  • GD32F4xx FreeRTOS 参考代码
  • GD32F4xxGD32F4xx GD32F4xx系列 MCU 是基于 ARM® Cortex™ ARM® Cortex™ ARM® Cortex™ ARM® Cortex™ ARM® Cortex™ ARM® Cortex™ -M4 处理器的 处理器的 处理器的 32 位通用微控制器 位通用微控制器 位...
  • GD32F4xx_IAP.zip

    2021-06-03 20:26:21
    GD32F4xx_UART_API(BOOTLOAD)
  • GD32F4xx数据手册,包括: GD32F4xx_User_Manual_CN_Rev2.3.pdf、 GD32F4xx_User_Manual_EN_V2.2-2.pdf、 GD32F450xx_Datasheet_Rev1.1.pdf、 GD32450I-EVAL__User Manual.pdf、 使用说明_GD-Link Programmer_v4.0....
  • GD32库文件,包含GPIO、SPI、I2C、UART等
  • gd32f4xx系列芯片的MDK支持安装包,安装MDK后运行该pack,mdk即可支持gd32f4xx系列芯片
  • GD32F4xx系列芯片的MDK支持安装包,安装MDK后运行该pack,mdk即可支持GD32F4xx系列芯片
  • GD32F4xx系列资料,编程手册和例程
  • GD32F450和STM32F4xx兼容性,硬件、软件兼容情况
  • GD32F4xx_AddOn_V2.0.2.rar

    2021-01-13 18:15:10
    GD32F4xx_AddOn_V2.0.2
  • GD32F4xx系列硬件开发指南 V1.0.pdf
  • gd32F4 系列中文编程手册 外设寄存器手册
  • GD32F4xx_User_Manual_CN_Rev2.3
  • gd32f4系列固件库,keil工程demo用例,欢迎下载使用gpio,adc,uart,printf,timer等等
  • GD32F4XX GPIO初始化

    2021-09-16 17:17:08
    GD32F4GD32初始化GPIO时也存在这区别,一下是对GD32F4XX初始化流程。 1、初始化时钟 rcu_periph_clock_enable(RCU_GPIOD); 2、设置输入输出模式 gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_...

    NOTE:

    GD32F4与GD32初始化GPIO时也存在这区别,一下是对GD32F4XX初始化流程。

    1、初始化时钟
    rcu_periph_clock_enable(RCU_GPIOD);

    2、设置输入输出模式
    gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_PIN_11);

    3、设置引脚速率
    gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);

    以上即可完成引脚得初始化

    控制引脚输出
    输出低
    gpio_bit_reset(relay_port,relay_pin);
    输出高
    gpio_bit_set(relay_port,relay_pin);

    获取引脚电平状态
    gpio_input_bit_get(uint32_t gpio_periph, uint32_t pin);

    ps:把基础打牢固,才能无后顾之忧往上冲,加油!

    欢迎: https://blog.csdn.net/qq_31227875?spm=1001.2101.3001.5343.

    展开全文
  • GD32F4xx_Demo_Suites
  • GD32F4系列的例程,UART串口,SPI,I2C,I2S,USB,定时器,适合初学者
  • STM32F407与GD32F407软件差异说明,GD32技术支持提供。
  • 用一个星期研究GD32F4系列的单片机,因为公司项目越来越偏向与GD系列的片子,就借着GD32F407的片子,使用LAN8720的PHY芯片移植了最新的FreeRTOS10.2.0系统,顺便移植进了LWIP2.0.2 网络协议,倒腾了一个星期,重要是...
  • GD32F4使用SPI接口的ILI93419341屏幕

    千次阅读 热门讨论 2019-09-30 11:56:49
    GD32F4国产芯片 gd32是一款国产单片机。在很多方面和STM32有异曲同工之处。这是GD32F407的Block Design。更多关于GD的信息可以查看手册,我只记录使用这款芯片的过程中和STM32的不同-.-、支持国产。 测试程序使用的...

    GD32F4国产芯片

    gd32是一款国产单片机。在很多方面和STM32有异曲同工之处。这是GD32F407的Block Design。更多关于GD的信息可以查看手册,我只记录使用这款芯片的过程中和STM32的不同-.-、支持国产。
    在这里插入图片描述GD

    测试程序使用的资源

    由于是一个SPI接口的屏幕、所以使用到GD32F4的SPI控制器。
    SPI控制器和STM32的不同之处:
    1、STM32的SPI1对应GD32的SPI2;
    2、STM32的SPI中的CLK和SDO(MISO)是相反的。
    3、资源复用也不一样(具体参考手册)。

    GD32的SPI2选择AF6复用方式:
    在这里插入图片描述

    GD32的SPI设置代码

    设置SPI的代码如下:

    void spi2_Init()
    {
    	spi_parameter_struct  spi_init_struct;
    	rcu_periph_clock_enable(RCU_GPIOB);
    	rcu_periph_clock_enable(RCU_SPI2);
    	
    		
        /* SPI2 GPIO config */
        gpio_af_set(GPIOB, GPIO_AF_6, GPIO_PIN_3 | GPIO_PIN_4 |GPIO_PIN_5);
        gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3 | GPIO_PIN_4 |GPIO_PIN_5);
        gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3 | GPIO_PIN_4 |GPIO_PIN_5);
    
        /* SPI2 parameter config */
        spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;
        spi_init_struct.device_mode          = SPI_MASTER;;
        spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;;
        spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;
        spi_init_struct.nss                  = SPI_NSS_SOFT;
        spi_init_struct.prescale             = SPI_PSC_8 ;
        spi_init_struct.endian               = SPI_ENDIAN_MSB;;
        spi_init(SPI2, &spi_init_struct);
    	
    		spi_enable(SPI2);
    }
    

    使用GD自带的库函数进行设置。和STM32的差别不大、只是把些许参数(.clock_polarity_phase )合并了和省去了CRC值计算的多项式的参数。

    总结

    GD32在外设方面、和STM32没有多大区别。
    只是需要注意资源的引脚分配。虽然和STM32使用方式一样、但是也存在GD自带的一些设计理念。

    在使用的过程中发现:GD的RTC会出现一些误差相比较STM32。后续会逐渐的对一些单元进行测试、比如FPU、EXMC(STM32的FSMC类似)等。

    如果要源程序、可留言。

    展开全文
  • GD32F4系列用户手册

    2018-10-17 11:09:17
    GD32F4系列用户手册,能够支持最高主频168M,M4内核,支持FPU
  • GD32F4xx调试笔记

    2021-07-12 19:12:25
    GD32F4xx调试笔记RCU配置Systick配置GPIO配置USART配置Basic Timer 设置PWM 设置 RCU配置 设置输入晶振频率 默认25MHz,需要根据硬件设备进行调整,这里设置为8MHz。/* define value of high speed crystal ...

    RCU

    1. 设置输入晶振频率 默认25MHz,需要根据硬件设备进行调整,这里设置为8MHz。
      /* define value of high speed crystal oscillator (HXTAL) in Hz */
      #if !defined  (HXTAL_VALUE)
      #define HXTAL_VALUE    ((uint32_t)8000000)
      #endif /* high speed crystal oscillator value */
      
    2. 设置内部时钟频率,默认选择__SYSTEM_CLOCK_200M_PLL_25M_HXTAL,这里设置为系统主时钟为168MHz,输入晶振8MHz。
      /* select a system clock by uncommenting the following line */
      //#define __SYSTEM_CLOCK_IRC16M                   (uint32_t)(__IRC16M)
      //#define __SYSTEM_CLOCK_HXTAL                    (uint32_t)(__HXTAL)
      //#define __SYSTEM_CLOCK_120M_PLL_IRC16M          (uint32_t)(120000000)
      //#define __SYSTEM_CLOCK_120M_PLL_8M_HXTAL          (uint32_t)(120000000)
      //#define __SYSTEM_CLOCK_120M_PLL_25M_HXTAL       (uint32_t)(120000000)
      //#define __SYSTEM_CLOCK_168M_PLL_IRC16M          (uint32_t)(168000000)
      #define __SYSTEM_CLOCK_168M_PLL_8M_HXTAL        (uint32_t)(168000000)
      //#define __SYSTEM_CLOCK_168M_PLL_25M_HXTAL       (uint32_t)(168000000)
      // #define __SYSTEM_CLOCK_200M_PLL_IRC16M          (uint32_t)(200000000)
      //#define __SYSTEM_CLOCK_200M_PLL_8M_HXTAL        (uint32_t)(200000000)
      //#define __SYSTEM_CLOCK_200M_PLL_25M_HXTAL         (uint32_t)(200000000)
      

    Systick

    1. 初始化函数
      ErrStatus Systick_Config(void)
      {
          /* setup systick timer for 1000Hz interrupts */
          if (SysTick_Config(SystemCoreClock / 1000U) == 1)
          {
              return ERROR;
          }
          /* configure the systick handler priority */
          NVIC_SetPriority(SysTick_IRQn, 0x00U);
      
          return SUCCESS;
      }
      
    2. 中断函数
      /*!
          \brief      this function handles SysTick exception
          \param[in]  none
          \param[out] none
          \retval     none
      */
      void SysTick_Handler(void)
      {
      
      }
      

    GPIO

    1. 配置输出模式
      void GPIO_Output_Config(void)
      {
          /* enable the GPIO clock */
          rcu_periph_clock_enable(RCU_GPIOD);
          /* configure GPIO port */
          gpio_mode_set(GPIOD,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,GPIO_PIN_0);
          gpio_output_options_set(GPIOD,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_0);
      }
      
    2. 配置输入模式
      /*!
          \brief      Configure Keyboard port
          \param[in]  none
          \param[out] none
          \retval     none
      */void Key_GPIO_Config(void)
      {
          KEY_CLOCK_ENABLE();
          
          gpio_mode_set(KEY_GPIOx,GPIO_MODE_INPUT,GPIO_PUPD_PULLUP,KEY_PIN);
      }
      

    USART

    1. 初始化函数

      
      /*!
          \brief      USART0 configure
          \param[in] usart_periph: USARTx(x=0,1,2,5)/UARTx(x=3,4,6,7)
          \param[in] baudval: baud rate value
          \param[in] paritycfg: configure USART parity
                     only one parameter can be selected which is shown as below:
            \arg       USART_PM_NONE: no parity
            \arg       USART_PM_EVEN: even parity 
            \arg       USART_PM_ODD:  odd parity
          \param[in] wlen: USART word length configure
                     only one parameter can be selected which is shown as below:
            \arg       USART_WL_8BIT: 8 bits
            \arg       USART_WL_9BIT: 9 bits
          \param[in] stblen: USART stop bit configure
                     only one parameter can be selected which is shown as below:
            \arg       USART_STB_1BIT:   1 bit
            \arg       USART_STB_0_5BIT: 0.5 bit(not available for UARTx(x=3,4,6,7))
            \arg       USART_STB_2BIT:   2 bits
            \arg       USART_STB_1_5BIT: 1.5 bits(not available for UARTx(x=3,4,6,7))
          \param[out] none
          \retval     none
      */
      void Uart0_Config(uint32_t baudval,uint32_t paritycfg,uint32_t wlen,uint32_t stblen)
      {
      	/* enable USART GPIO clock */
      	rcu_periph_clock_enable(RCU_GPIOA);
      	/* enable USART clock */
      	rcu_periph_clock_enable(RCU_USART0);
      
          /* configure USART0 Tx as alternate function push-pull */
          gpio_af_set(UART0_GPIO_PORT, GPIO_AF_7, UART0_TX_PIN | UART0_RX_PIN);
          gpio_mode_set(UART0_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, UART0_TX_PIN | UART0_RX_PIN);
          gpio_output_options_set(UART0_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, UART0_TX_PIN | UART0_RX_PIN);
      
          usart_deinit(USART0);
          /* USART configure */
          usart_baudrate_set(USART0, baudval);
          usart_parity_config(USART0,paritycfg);
          usart_word_length_set(USART0,wlen);
          usart_stop_bit_set(USART0,stblen);
          
          UART0_NVIC_IRQ();
          usart_interrupt_enable(USART0, USART_INT_RBNE);
          
          usart_receive_config(USART0, USART_RECEIVE_ENABLE);
          usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
          usart_enable(USART0);
      }
      
    2. 中断函数

      	void USART0_IRQHandler(void)
      	{
      	    if(usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE) != RESET)
      	    {
      	        if (cntRxd < sizeof(bufRxd))
      	        {
      	            bufRxd[cntRxd++] =(uint8_t)usart_data_receive(USART0);
      	        }
      	        usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE);
      	    }
      	}
      
    3. 发送函数

      void Uart0_SendString(uint8_t *dat, uint16_t len)
      {
          while(len--)
          {
              usart_data_transmit(USART0,*dat++);
              while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
          }
      }
      

    Basic Timer

    1. 初始化函数

      /*!
          \brief      Configure basic timer related setting parameters.
          \param[in]  arr: period value
          \param[in]  psc: prescaler value
          \param[out] none
          \retval     none
      */
      void Basic_Timer_Config(uint16_t arr, uint16_t psc)
      {
          timer_parameter_struct timer_initpara;
          
          timer_initpara.period = arr;
          timer_initpara.prescaler = psc;
          timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
          timer_initpara.counterdirection  = TIMER_COUNTER_UP;
          timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
          timer_initpara.repetitioncounter = 0;
      
          /* TIMx clock enable */    
          BASIC_TIMER_CLOCK_ENABLE();
          /* TIMx interrupt Init */
          BASIC_TIMER_NVIC_IRQ();
      
          timer_deinit(BASIC_TIMER_X);
          timer_init(BASIC_TIMER_X, &timer_initpara);
      
          timer_update_event_enable(BASIC_TIMER_X);
          timer_interrupt_enable(BASIC_TIMER_X, TIMER_INT_UP);
          timer_flag_clear(BASIC_TIMER_X, TIMER_FLAG_UP);
          timer_update_source_config(BASIC_TIMER_X, TIMER_UPDATE_SRC_GLOBAL);
          
          timer_enable(BASIC_TIMER_X);
      }
      
    2. 中断函数

      void Basic_TIMERx_IRQHandler( void )
      {
          if( timer_interrupt_flag_get(TIMER1, TIMER_INT_FLAG_UP ) != RESET )
          {
          
              timer_interrupt_flag_clear(TIMER1, TIMER_INT_FLAG_UP);
          }
      }
      

    PWM

    1. 初始化函数

      /*!
          \brief      Configure PWM related setting parameters.
          \param[in]  arr: period value
          \param[in]  psc: prescaler value
          \param[out] none
          \retval     none
      */
      void PWM_Timer_Config(uint16_t arr, uint16_t psc)
      {
          timer_parameter_struct timer_initpara;
          timer_oc_parameter_struct timer_ocintpara;
          
          /* TIM clock enable */
          PWM_CLOCK_ENABLE();
          PWM_GPIO_CLOCK_ENABLE();
          
          gpio_mode_set(PWM_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, PWM_PIN0|PWM_PIN1); 
          gpio_output_options_set(PWM_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, PWM_PIN0|PWM_PIN1);
          gpio_af_set(PWM_GPIO_PORT, GPIO_AF_2, PWM_PIN0|PWM_PIN1);
      
          timer_deinit(PWM_TIMER_X);
          
          timer_initpara.period = arr;
          timer_initpara.prescaler = psc;
          timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
          timer_initpara.counterdirection  = TIMER_COUNTER_UP;
          timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
          timer_initpara.repetitioncounter = 0;
          timer_init(PWM_TIMER_X, &timer_initpara);
          
          /* CH2 configuration in PWM mode 0 */
          timer_ocintpara.ocpolarity  = TIMER_OC_POLARITY_HIGH;
          timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
          timer_ocintpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;
          timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;
          timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;
          timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;
          
          timer_channel_output_config(PWM_TIMER_X,PWM_CH0,&timer_ocintpara);
          timer_channel_output_config(PWM_TIMER_X,PWM_CH1,&timer_ocintpara);
      
          /* configuration in PWM mode 0,duty cycle 0% */
          timer_channel_output_pulse_value_config(PWM_TIMER_X,PWM_CH0,0);
          timer_channel_output_mode_config(PWM_TIMER_X,PWM_CH0,TIMER_OC_MODE_PWM0);
          timer_channel_output_shadow_config(PWM_TIMER_X,PWM_CH0,TIMER_OC_SHADOW_DISABLE);
          
          timer_channel_output_pulse_value_config(PWM_TIMER_X,PWM_CH1,0);
          timer_channel_output_mode_config(PWM_TIMER_X,PWM_CH1,TIMER_OC_MODE_PWM0);
          timer_channel_output_shadow_config(PWM_TIMER_X,PWM_CH1,TIMER_OC_SHADOW_DISABLE);
      
          /* auto-reload preload enable */
          timer_auto_reload_shadow_enable(PWM_TIMER_X);
          /* TIMER enable */
          timer_enable(PWM_TIMER_X);
      }
      
    2. 占空比设置参数

      /*!
          \brief      According to the selected PWM channel, set the required output duty cycle.
          \param[in]  ch: Select output channel(0~1) 
          \param[in]  duty: Setting the duty cycle(0~168) 
          \param[out] none
          \retval     none
      */
      void PWM_Set_duty(uint8_t ch, uint16_t duty)
      {
          if ( ch == 0)
              timer_channel_output_pulse_value_config(PWM_TIMER_X,PWM_CH0,duty);
          else if (ch == 1)
              timer_channel_output_pulse_value_config(PWM_TIMER_X,PWM_CH1,duty);
      }
      

    DAC

    1. DAC配置函数
      /*!
          \brief      configure the DAC
          \param[in]  none
          \param[out] none
          \retval     none
      */
      void DAC_Config(void)
      {
          dac_deinit();
          
          rcu_periph_clock_enable(RCU_GPIOA);
          rcu_periph_clock_enable(RCU_DAC);
          
          /* once enabled the DAC, the corresponding GPIO pin is connected to the DAC converter automatically */
          gpio_mode_set(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO_PIN_4|GPIO_PIN_5);
      
          /* configure the DAC0 */
          dac_trigger_disable(DAC0);
          dac_wave_mode_config(DAC0, DAC_WAVE_DISABLE);
          dac_output_buffer_enable(DAC0);
          
          dac_trigger_disable(DAC1);
          dac_wave_mode_config(DAC1, DAC_WAVE_DISABLE);
          dac_output_buffer_enable(DAC1);
          
          /* enable DAC0 and set data */
          dac_enable(DAC0);
          dac_enable(DAC1);
      }
      
    展开全文
  • 一直使用STM32F4搭配HAL库做项目,最近需要将软件移植至国产的GD32F4上,但兆易仅提供了标准库,并未像ST那样提供HAL库,但二者USB库又互不兼容。最后,为了原软件不做大的修改,故决定使用ST的HAL库+兆易的USB库来...

    一直使用STM32F4搭配HAL库做项目,最近需要将软件移植至国产的GD32F4上,但兆易仅提供了标准库,并未像ST那样提供HAL库,但二者USB库又互不兼容。最后,为了原软件不做大的修改,故决定使用ST的HAL库+兆易的USB库来实现。

    1. 首先是USB库文件的准备,兆易官网可下载GD32F4xx_Firmware_Library,将Firmware\GD32F4xx_usb_library目录下的相关文件拷贝至工程目录中,并添加至工程中,文件目录结构如下图所示:
      在这里插入图片描述
      另外,在Examples\USB\USB_Device\cdc_acm\inc目录下的usb_conf.h和usbd_conf.h也需要拷贝至工程的inc目录中。
    2. USB的硬件配置还是使用ST的CubeMX生成,USB模式选择Device_Only,Middleware中USB的相关选项无需配置,配置如下图所示:
      在这里插入图片描述
    3. USB库文件需要做简单的修改,睡眠模式相关函数pmu_to_deepsleepmode和微秒延时函数usb_udelay直接注释掉了,毫秒延时函数usb_mdelay用HAL_Delay替代。
    4. usb_conf.h中相关的头文件进行了替换修改,如下:
    #include "stm32f407xx.h"
    #include "stm32f4xx_hal.h"
    #include "gd32f4xx_compat.h"
    //#include "gd32f4xx.h"
    //#include "gd32f450i_eval.h"
    

    stm32f4xx_it.c中的USB中断处理函数HAL_PCD_IRQHandler用usbd_isr进行替代,如下:

    //  HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS);
      usbd_isr(&cdc_acm);
    
    1. 新增了一个USB库所需宏定义描述的文件gd32f4xx_compat.h,如下:
    #ifndef GD32F4XX_COMPAT_H
    #define GD32F4XX_COMPAT_H
    
    /* bit operations */
    #define REG32(addr)                  (*(volatile uint32_t *)(uint32_t)(addr))
    #define REG16(addr)                  (*(volatile uint16_t *)(uint32_t)(addr))
    #define REG8(addr)                   (*(volatile uint8_t *)(uint32_t)(addr))
    #define BIT(x)                       ((uint32_t)((uint32_t)0x01U<<(x)))
    #define BITS(start, end)             ((0xFFFFFFFFUL << (start)) & (0xFFFFFFFFUL >> (31U - (uint32_t)(end)))) 
    #define GET_BITS(regval, start, end) (((regval) & BITS((start),(end))) >> (start))
    
    #endif
    
    1. 完成上述修改后,其虚拟串口即可被正确识别,如下图所示:
      在这里插入图片描述
    展开全文
  • Cortex-M4性价比之王GD32F450VIT6 超越STM32F429-GD32F4xx_User_Manual_CN.pdf
  • 之后就怀疑是不是GD32和STM32不兼容。 最后发现是一个很愚蠢的问题,是在寄存器操作这块。下面是F1的IO口映射函数,在驱动LCD的文件里用了许多这种PAout这种操作IO口的函数,但是F1和F4输入输出寄存器的地址是不...
  • GD32F4xx芯片开发记录—时钟设置(一) 在进行GD32F4xx芯片开发之后,踩过最多的坑就是时钟的坑,所以后来痛定思痛认真读了一下例程代码进行解析,在此记录一下,希望也给大家有个小小的参考 例程里关于时钟宏定义...
  • 附件为国产ARM GD32 数据手册,解决了官网下载需要注册的繁琐过程,一键下载。
  • ARM M4 STM32F407的国产化替代 发 V1.1

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,534
精华内容 1,813
关键字:

gd32f4