发新帖我要提问
12
返回列表
打印

用keil开发GD32E103C8

[复制链接]
楼主: rurubudong
手机看帖
扫描二维码
随时随地手机跟帖
21
apleilx| | 2020-3-21 12:53 | 只看该作者 回帖奖励 |倒序浏览
xdqfc 发表于 2020-3-21 11:11
另外一个方法,你在刚才的文件开头部分重新定义一下,把//#define __SYSTEM_CLOCK_48M_PLL_IRC8M         ...

我用的是GD32E103CBT6,12M晶振,时钟函数是看手册修改的,配置完后调用下 SystemClockUpdate自动更新下 SystemCoreClock变量,没有这个问题,预定义那个数实际没啥作用,要以SystemClockUpdate计算的时钟为准。

使用特权

评论回复
22
rurubudong|  楼主 | 2020-3-21 14:49 | 只看该作者
xdqfc 发表于 2020-3-21 11:13
发错人了,对不起。

谢谢哈,可以了。

使用特权

评论回复
23
rurubudong|  楼主 | 2020-3-21 16:23 | 只看该作者
apleilx 发表于 2020-3-21 12:53
我用的是GD32E103CBT6,12M晶振,时钟函数是看手册修改的,配置完后调用下 SystemClockUpdate自动更新下  ...

你用过GD32E103的USART0,映射的引脚为PB6、PB7么?我现在映射到PA9、PA10,收发正常,映射到PB6、PB7只能接收数据,不能发送数据

使用特权

评论回复
24
xdqfc| | 2020-3-21 17:25 | 只看该作者
apleilx 发表于 2020-3-21 12:53
我用的是GD32E103CBT6,12M晶振,时钟函数是看手册修改的,配置完后调用下 SystemClockUpdate自动更新下  ...

兄弟,GD32E103我拍了几块下去了,估计过几天就到了,希望能如你所说,U盘可以热插拔。GD32F350肯定实现不了热插拔的,我刚才又试了一下。

使用特权

评论回复
评论
xdqfc 2020-3-23 18:01 回复TA
@apleilx :今天拿的芯片试了一下,非常完美,兄弟,太感谢了,GD32F350没有办法实现热插拔的。这个就可以。 
apleilx 2020-3-22 17:43 回复TA
@xdqfc :肯定要热插拔的,我们的设备常年不断电,需要导出数据的时候U盘插上,导完数据拔下来,肯定是要反复操作的。 
xdqfc 2020-3-22 10:01 回复TA
@apleilx :这种回复让我有种不祥的预感,我要的是支持热插拔,也就是芯片上电运行后,在不读写数据的情况下,随时可以插拔U盘,都不影响下次的数据读写,速度我现在还没有关心。 
apleilx 2020-3-21 18:12 回复TA
我们做的这个产品已经批量生产了,芯片肯定没问题。 用的库是21IC GD官方板块下载的固件库,参考它的用法是可以正常工作的,速度还可以, 写入U盘1MB数据 大约四五秒。 
25
lvben5d| | 2020-3-22 08:32 | 只看该作者
本帖最后由 lvben5d 于 2020-3-22 08:35 编辑

我也用的是GD32E103C8T6  硬件仿真 在keil 5上 正常。 现在GD的pack库 可以直接安装到Keil5 安装路境内,不会找不到器件啦。 硬仿进不去main, 估计卡在时钟初始化,单步跟进去看看就可以马上找到问题。记得从最开始system init函数 单步硬件仿真跟进去。 由于默认官网模版的时钟配置,跟你实际不一样,要简单的去了解概念,找下区别。 不复杂,耐心去找下。 就1个system_gd32e10x.c文件里的事

使用特权

评论回复
26
xdqfc| | 2020-3-22 09:36 | 只看该作者
lvben5d 发表于 2020-3-22 08:32
我也用的是GD32E103C8T6  硬件仿真 在keil 5上 正常。 现在GD的pack库 可以直接安装到Keil5 安装路境内,不 ...

我那个GD32VF103,用的是Eclipse,其实也是跟mdk差不多,修改了主频配置,卵用都没有,始终进不了main,就是USB相关的例程是这样,其他外设的例程倒是非常顺利,也不知道如何处理了。芯片型号是GD32VF103C8T6。兄弟能帮助解决一下吗??


使用特权

评论回复
27
rurubudong|  楼主 | 2020-3-22 16:45 | 只看该作者
lvben5d 发表于 2020-3-22 08:32
我也用的是GD32E103C8T6  硬件仿真 在keil 5上 正常。 现在GD的pack库 可以直接安装到Keil5 安装路境内,不 ...

现在在线调试能够main函数了。我在线调试单步运行发现停到disassemly窗口中,按照楼上几位的说法改了一下,又检查了我的硬件就好了。现在我的串口0配置到PB6、PB7后只能接收数据,不能发送数据,不知道你遇到过没?
我的串口0初始化如下:
void USART0_Init(u32 bound)
{

        rcu_periph_clock_enable(RCU_AF);        //Need!!!!
        rcu_periph_clock_enable(RCU_GPIOB);
        gpio_pin_remap_config(GPIO_USART0_REMAP,ENABLE);
        rcu_periph_clock_enable(RCU_USART0);       
  
        //USART0_TX                       
        /* connect port to USARTx_Tx */
  gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_6);
/* connect port to USARTx_Rx */   
        gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_7);                       
        gpio_pin_remap_config(GPIO_USART0_REMAP,ENABLE);


        usart_deinit (USART0);
        /*  ÅäÖÃGPIOµÄģʽºÍIO¿Ú */
//        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX                           //´®¿ÚÊä³öPB6
//        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
//        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;            //¸´ÓÃÍÆÍìÊä³ö
////        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;            //¸´ÓÃÍÆÍìÊä³ö
//        GPIO_Init(GPIOA,&GPIO_InitStructure);  /* ³õʼ»¯´®¿ÚÊäÈëIO */
//        GPIO_InitStructure.GPIO_Pin=10;//RX                         //´®¿ÚÊäÈëPA10
//        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;                  //Ä£ÄâÊäÈë
//        GPIO_Init(GPIOA,&GPIO_InitStructure); /* ³õʼ»¯GPIO */
//       

   //USART1 ³õʼ»¯ÉèÖÃ
//        USART_InitStructure.USART_BaudRate = bound;//²¨ÌØÂÊÉèÖÃ
//        USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ
//        USART_InitStructure.USART_StopBits = USART_StopBits_1;//Ò»¸öֹͣλ
//        USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæżУÑéλ
//        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý¾ÝÁ÷¿ØÖÆ
//        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //ÊÕ·¢Ä£Ê½
//        USART_Init(USART1, &USART_InitStructure); //³õʼ»¯´®¿Ú1
        usart_word_length_set(USART0, USART_WL_8BIT);                                                        //×Ö³¤Îª8λÊý¾Ý¸ñʽ
  usart_stop_bit_set(USART0, USART_STB_1BIT);                                                                //Ò»¸öֹͣλ
        usart_parity_config(USART0, USART_PM_NONE);                                                                //ÎÞÆæżУÑéλ
        usart_baudrate_set(USART0, bound);
        usart_receive_config(USART0, USART_RECEIVE_ENABLE);
  usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);       
       
        nvic_irq_enable(USART0_IRQn,0,0);
        usart_interrupt_enable(USART0, USART_INT_RBNE);                                                //read data buffer not empty interrupt and overrun error interrupt
//  usart_interrupt_enable(USART0, USART_INT_TBE);
       
        usart_enable(USART0);
//        USART_Cmd(USART1, ENABLE);  //ʹÄÜ´®¿Ú1
//       
//        USART_ClearFlag(USART1, USART_FLAG_TC);
//               
//        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//¿ªÆôÏà¹ØÖжÏ

//        //Usart1 NVIC ÅäÖÃ
//        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//´®¿Ú1ÖжÏͨµÀ
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//ÇÀÕ¼ÓÅÏȼ¶3
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;                //×ÓÓÅÏȼ¶3
//        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQͨµÀʹÄÜ
//        NVIC_Init(&NVIC_InitStructure);        //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷¡¢       
}

使用特权

评论回复
28
xdqfc| | 2020-3-22 18:10 | 只看该作者
rurubudong 发表于 2020-3-22 16:45
现在在线调试能够main函数了。我在线调试单步运行发现停到disassemly窗口中,按照楼上几位的说法改了一下 ...

用示波器看一下有没有发送波形出来。

使用特权

评论回复
29
xdqfc| | 2020-3-22 18:18 | 只看该作者
这个芯片没有用过,按理都要设置为AF模式,我看上面PB6是的,PB7好像是普通模式,另外最好用仿真器看一下端口设置是不是准确,按理符合文档规定之后,肯定能可以发送的。先用仿真器看一下端口设置吧。

使用特权

评论回复
30
xdqfc| | 2020-3-22 18:24 | 只看该作者
gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_7);  改AF模式试试看吧,130根450,我记得当初都是AF模式,这个芯片难道不一样???

使用特权

评论回复
31
xdqfc| | 2020-3-22 18:27 | 只看该作者
    /* configure USART Tx as alternate function push-pull */
    gpio_af_set(GPIOB, GPIO_AF_7,  GPIO_PIN_6 | GPIO_PIN_7);
    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_6 | GPIO_PIN_7);
    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6 | GPIO_PIN_7);
这个是我用GD32F450的设置。

使用特权

评论回复
32
lvben5d| | 2020-3-22 18:42 | 只看该作者
xdqfc 发表于 2020-3-22 09:36
我那个GD32VF103,用的是Eclipse,其实也是跟mdk差不多,修改了主频配置,卵用都没有,始终进不了main, ...

VF 没用过,现在懒惰了,没学习新知识的动力和态度。  加油~ 帅哥  开荒

使用特权

评论回复
33
lvben5d| | 2020-3-22 18:46 | 只看该作者
rurubudong 发表于 2020-3-22 16:45
现在在线调试能够main函数了。我在线调试单步运行发现停到disassemly窗口中,按照楼上几位的说法改了一下 ...

GD32E103的 工程  我试过USB  CAN 串口  定时器 GPIO 外设都可以正常. 现在是V1.0.3版 感觉里面文件都是1.0.0版 暂时没找到不同点地方。 这个CAN1和CAN0 使用的时候,要注意时钟使能 和 共享过滤FIFO地址区概念。

使用特权

评论回复
34
rurubudong|  楼主 | 2020-3-23 18:30 | 只看该作者
xdqfc 发表于 2020-3-22 18:10
用示波器看一下有没有发送波形出来。

上面的代码是对的,我把PB6串联的100欧电阻去掉改为0欧就可以了。用示波器看波形发现有数据发出,但是过了那个100欧的电阻后低电平就被拉高了。想不明白为什么,这跟GD32E103的驱动能力有关么?

使用特权

评论回复
35
明明很讨厌| | 2020-4-9 10:15 | 只看该作者
keil的设置里有一个run to main选项,勾选该选项,调试的时候就会直接运行到main函数。现在你的问题是无法运行到main函数,那么大概率是时钟配置这一块出问题了。所以你可以不勾选run to main,在重新进入debug,单步调试看看问题出在哪里。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则