-
GD32F303问题
[color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]问题背景是这样的:[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]配置了一个20Khz的定时器溢出中断,System_cnt_add()函数是对一个变量++,就是创建了一个时间基准。然后在Task_time_slice_function()函数里面实现了一个led每0.5s翻转的任务。[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]于是遇到了这样一个问题:[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]当我把这个Task_time_slice_function()函数放在中断的时候,led能够正常实现每0.5s翻转的操作,也就是输出一个1Hz的方波。但是当我把Task_time_slice_function()函数放在main函数的while循环里面时,功能就失效了,变成输出32Hz的方波。有没有人知道怎么回事,希望能指点一下,谢谢![/size][/font][/backcolor][/color][font=Tahoma, Microsoft Yahei, Simsun][color=#444444][size=16px] [/size][/color][/font][color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]这是用到的几个函数[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]int main(void)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]{[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] Systemclock_config();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] nvic_config();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] gpio_config();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] spi2_config();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] timer_config();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] System_cnt_init();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] while(1)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] Task_time_slice_function();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]}[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]/* time0 20kHz*/[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]void TIMER0_UP_IRQHandler(void)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]{ [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] if(SET == timer_interrupt_flag_get(TIMER0, TIMER_INT_UP))[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_UP);[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] System_cnt_add();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]}[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]void Task_time_slice_function(void)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]{[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] /* 1ms */[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] if(_abs(systemclock_data.systemclock_cnt - systemclock_data.systemclock_lastcnt_1ms) >= systemclock_data.systemclock_cnt_1ms)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] systemclock_data.systemclock_lastcnt_1ms = systemclock_data.systemclock_cnt;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] led_main();[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] /* 10ms */[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] if(_abs(systemclock_data.systemclock_cnt - systemclock_data.systemclock_lastcnt_10ms) >= systemclock_data.systemclock_cnt_10ms)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] systemclock_data.systemclock_lastcnt_10ms = systemclock_data.systemclock_cnt;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] /* 100ms */[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] if(_abs(systemclock_data.systemclock_cnt - systemclock_data.systemclock_lastcnt_100ms) >= systemclock_data.systemclock_cnt_100ms)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] systemclock_data.systemclock_lastcnt_100ms = systemclock_data.systemclock_cnt;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] /* 1000ms */[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] if(_abs(systemclock_data.systemclock_cnt - systemclock_data.systemclock_lastcnt_1000ms) >= systemclock_data.systemclock_cnt_1000ms)[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] {[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] systemclock_data.systemclock_lastcnt_1000ms = systemclock_data.systemclock_cnt;[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] [/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px] }[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(242, 249, 253)][font=Tahoma, "][size=16px]}[/size][/font][/backcolor][/color]
2118浏览量 3回复量 关注量 -
GD32F303问题
问题背景是这样的: 配置了一个20Khz的定时器溢出中断,System_cnt_add()函数是对一个变量++,就是创建了一个时间基准。然后在Task_time_slice_function()函数里面实现了一个led每0.5s翻转的任务。 于是遇到了这样一个问题: 当我把这个Task_time_slice_function()函数放在中断的时候,led能够正常实现每0.5s翻转的操作,也就是输出一个1Hz的方波。但是当我把Task_time_slice_function()函数放在main函数的while循环里面时,功能就失效了,变成输出32Hz的方波。有没有人知道怎么回事,希望能指点一下,谢谢!
1249浏览量 1回复量 关注量 -
KEIL5 使用J-LINK连接GD32F303RB芯片。J-LINK驱动中没有GD32F303RB sos
KEIL5 使用J-LINK连接GD32F303RB芯片。J-LINK驱动中找不到GD32F303RB这款芯片,只能找到GD32F303其他系列的,请问这种情况需要怎么处理?更换连接器吗?使用U-LINK还是GD-LINK,KEIL5中连接下载没有GD-LINK这个选项,如果使用GD-link又该怎么操作?使用U-LINK能否方便帮忙看一下能不能找到GD32F303RB.
1013浏览量 0回复量 关注量 -
GD32F303用systick做延时出现延时不准 sos
/* Configure the system clock */ rcu_config(); /* configure systick */ systick_config(); /* GPIO configuration */ gpio_config(); while (1) { gpio_bit_set(GPIOB, SCRPL_Pin); mydelay(); // delay_1ms(1); gpio_bit_reset(GPIOB, SCRPL_Pin); delay_1ms(1); } void mydelay(void) { uint16_t i; i=5000; while(0U != i){ i--; } } 在用2个delay_1ms(1)延时时,端口高低电平时间都是1ms,但是如果把高电平的延时换成for循环实现的延时会使低电平的时间也发生变化不是1ms了。
1572浏览量 0回复量 关注量 -
GD32F303 串口DMA发送问题
[i=s] 本帖最后由 jsrdczy 于 2021-11-22 15:55 编辑 [/i] 兄弟萌,有一个关于gd32的串口dma发送问题:场景描述:串口DMA发送数据,一般的做法是开DMA发送完成中断,然后在中断里切换发送状态或者进行下一次传输。 思路描述:如果是485传输,如果用DMA发送完成中断的话,在中断里发送改为接收状态时,可能会丢1个字节。所以沿用之前stm32的做法,打开串口的发送完成中断,利用tc中断在串口中断服务程序中切换状态或者进行下一帧发送。 问题:之前stm32的工程就是用串口tc发送完成中断来标识发送完成的,但是同样的做法在gd32上,虽然能够进行入tc中断,但是发送出来的数据完全不对。解决办法:dma通道使能后delay 3个ms 就可以发送正确发送了,和开dma或者串口tc中断没有关系。 贴一部分代码: DMA配置: static void gd32_dma_config(struct rt_serial_device *serial, rt_ubase_t flag) { struct dma_config *dma_config; struct gd32_uart *uart; dma_parameter_struct dma_init_struct; RT_ASSERT(serial != RT_NULL); uart = (struct gd32_uart *)serial->parent.user_data; if (RT_DEVICE_FLAG_DMA_TX == flag) { dma_config = uart->dma_tx; } else if(RT_DEVICE_FLAG_DMA_RX == flag) { return ; // no support temporarily } //enable dma clock rcu_periph_clock_enable(dma_config->dma_rcu); //initillize DMA channel dma_deinit(dma_config->dma_periph, dma_config->channel); dma_struct_para_init(&dma_init_struct); dma_channel_disable(uart->dma_tx->dma_periph,uart->dma_tx->channel); dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL; dma_init_struct.memory_addr = RT_NULL; dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE; dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT; dma_init_struct.number = 0; dma_init_struct.periph_addr = (uint32_t)&USART_DATA(uart->uart_periph); dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE; dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT; dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH; dma_init(dma_config->dma_periph, dma_config->channel, &dma_init_struct); dma_circulation_disable(dma_config->dma_periph, dma_config->channel); dma_memory_to_memory_disable(dma_config->dma_periph, dma_config->channel); if (RT_DEVICE_FLAG_DMA_TX == flag) { usart_flag_clear(uart->uart_periph, USART_FLAG_TC); //clear flag dma_interrupt_flag_clear(uart->dma_tx->dma_periph, uart->dma_tx->channel,DMA_FLAG_G); /* enable rx irq */ NVIC_EnableIRQ(uart->irqn); /* enable interrupt */ usart_interrupt_enable(uart->uart_periph, USART_INT_TC); //uart tc send complete interrupt usart_dma_transmit_config(uart->uart_periph, USART_DENT_ENABLE); } #endif } DMA发送 static rt_size_t gd32_dma_transmit(struct rt_serial_device *serial, rt_uint8_t *buf, rt_size_t size, int direction) { struct gd32_uart *uart; RT_ASSERT(serial != RT_NULL); RT_ASSERT(buf != RT_NULL); uart = (struct gd32_uart *)serial->parent.user_data; struct rt_serial_tx_dma *tx_dma; tx_dma = (struct rt_serial_tx_dma*)(serial->serial_tx); if (size == 0) { return 0; } if (RT_SERIAL_DMA_TX == direction) { dma_channel_disable(uart->dma_tx->dma_periph,uart->dma_tx->channel); dma_interrupt_flag_clear(uart->dma_tx->dma_periph, uart->dma_tx->channel,DMA_FLAG_G); usart_flag_clear(uart->uart_periph, USART_FLAG_TC); //clear flag dma_memory_address_config(uart->dma_tx->dma_periph,uart->dma_tx->channel,(uint32_t)buf); dma_transfer_number_config(uart->dma_tx->dma_periph,uart->dma_tx->channel,size); dma_channel_enable(uart->dma_tx->dma_periph,uart->dma_tx->channel); [color=#ff0000]//rt_thread_mdelay(3); 这里delay就能发送[/color] return size; } return 0; } 串口发送完成中断(tc)处理: static void uart_isr(struct rt_serial_device *serial) { struct gd32_uart *uart = (struct gd32_uart *) serial->parent.user_data; rt_base_t level; rt_size_t trans_total_index; RT_ASSERT(uart != RT_NULL); /* UART in mode Receiver -------------------------------------------------*/ if ((usart_interrupt_flag_get(uart->uart_periph, USART_INT_FLAG_RBNE) != RESET) && (usart_flag_get(uart->uart_periph, USART_FLAG_RBNE) != RESET)) { rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND); /* Clear RXNE interrupt flag */ usart_flag_clear(uart->uart_periph, USART_FLAG_RBNE); } /* UART in mode Transmiter -------------------------------------------------*/ if ((usart_interrupt_flag_get(uart->uart_periph, USART_INT_FLAG_TC) != RESET) && (usart_flag_get(uart->uart_periph, USART_FLAG_TC) != RESET)) { if(dma_flag_get(uart->dma_tx->dma_periph, uart->dma_tx->channel,DMA_FLAG_FTF) == SET) { rt_hw_serial_isr(serial, RT_SERIAL_EVENT_TX_DMADONE); dma_interrupt_flag_clear(uart->dma_tx->dma_periph, uart->dma_tx->channel,DMA_FLAG_G); } /* Clear TC interrupt flag */ usart_flag_clear(uart->uart_periph, USART_FLAG_TC); } } 目前的现象就是tc中断可以进,发出来的字节数也对,但是内容除了头2个字节,其余的字节全都不对。换成DMA发送完成中断也是杨的现象 那位用gd32的大佬使用过,一起探讨下,看是否是我哪里配置有啥问题
2319浏览量 1回复量 关注量 -
GD32F303替换STM后 串口通讯问题
公司有一批产品测试GD32替换STM的兼容性,先测的是用GD32F303RET6替换STM32F103RET6。查了下资料了解到可以P2P替换,只是硬件上主频功耗工作电压等有些许差别。测试的几处产品直接替换后不修改代码直接烧写就能成功运行,功能也基本正常。但最后测的一款产品,主要使用上位机软件通过RS485控制通道的打开关闭,产品本身的实体按键功能没有问题,而在GD32下使用上位机软件则需要快速双击按钮才能进行控制,用串口助手调试,连接好后发送控制命令也接收不到。 网上有说可能是因为GD32代码执行过快导致,设置延时之后问题没有得到解决。 有没有高人能指点一下还有什么可能的原因呢?
5989浏览量 2回复量 关注量 -
GD32F303 RTC闹钟
为什么我的GD32F303 RTC闹钟的无法设置,RTC其他功能正常;1、设置方法按照手册,使用 库函数设置,但是设置完成之后RTC_ALRMH和RTC_ALRML两个寄存器的值还是0 void rtc_alarm_config(uint32_t alarm) { rtc_configuration_mode_enter(); /* set the alarm high bits */ RTC_ALRMH = alarm >> 16; /* set the alarm low bits */ RTC_ALRML = (alarm & RTC_LOW_VALUE); rtc_configuration_mode_exit(); } 2、手册上说RTC_ALRMH和RTC_ALRML两个寄存器复位值是0xFFFF,但实际是0
4068浏览量 3回复量 关注量 -
GD32F303串口不能产生空闲中断
初次使用GD32F303芯片,以为没什么难度呢结果一上来就碰到问题了,串口不能产生空闲中断 看看我的代码是否有错 void NVIC_swtConfiguration(void) { /* USART interrupt configuration */ nvic_irq_enable(MY_USART_IRQ, 1, 0); usart_interrupt_enable(MY_USART, USART_INT_IDLE); /* enable USART TBE interrupt */ usart_interrupt_enable(MY_USART, USART_INT_RBNE); } // 配置通信端口 void funcSerialConfig(void) { // /* Enable GPIO clock rcu_periph_clock_enable(MYRCC_USART_PORT); rcu_periph_clock_enable(MYRCC_USART); /* connect port to USARTx_Tx */ gpio_init(MY_USART_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, MY_USART_TX_PIN); /* connect port to USARTx_Rx */ gpio_init(MY_USART_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, MY_USART_RX_PIN); usart_deinit(MY_USART); usart_baudrate_set(MY_USART, 115200); usart_receive_config(MY_USART, USART_RECEIVE_ENABLE); usart_transmit_config(MY_USART, USART_TRANSMIT_ENABLE); NVIC_swtConfiguration(); usart_enable(MY_USART); waitForSend = 1; swt_RxCounter = 1; usart_direct_send_data((const uint8_t*)"GD32F303VCT6 IDLE INT", 21); } 中断函数 void UART3_IRQHandler(void) { uint16_t RxChar; if((RESET != usart_interrupt_flag_get(MY_USART, USART_INT_FLAG_RBNE)) && (RESET != usart_flag_get(MY_USART, USART_FLAG_RBNE))){ RxChar = (usart_data_receive(MY_USART) & 0xfF); /* receive data */ #if (ENABEL_DMA_TRANS == 0) swt_recArray[swtRecieved][swt_RxCounter++] = RxChar; if(swt_RxCounter >= EP_PACKET_MAX_SIZE) { usart_dma_irq_reciev_cb(); } #endif usart_flag_clear(MY_USART, USART_FLAG_RBNE); } [color=#f000f0] if((RESET != usart_flag_get(MY_USART, USART_FLAG_IDLE)) && [/color] [color=#f000f0] (RESET != usart_interrupt_flag_get(MY_USART, USART_INT_IDLE)))[/color] [color=#f000f0] {[/color] [color=#f000f0] RxChar = (usart_data_receive(MY_USART) & 0xfF);[/color] [color=#f000f0] usart_dma_irq_reciev_cb();[/color] [color=#f000f0] }[/color] if((RESET != usart_flag_get(MY_USART, USART_FLAG_TBE)) && (RESET != usart_interrupt_flag_get(MY_USART, USART_INT_TBE))) { // usart_interrupt_flag_clear(MY_USART, USART_INT_TBE); /* transmit data */ usart_data_transmit(MY_USART, swt_waitForsendArr[swt_currTxPointer][txPointer++]); if(txCounter == txPointer){ usart_interrupt_disable(MY_USART, USART_INT_TBE); } usart_flag_clear(MY_USART, USART_FLAG_TBE); } if((RESET != usart_flag_get(MY_USART, USART_FLAG_TC)) && (RESET != usart_interrupt_flag_get(MY_USART, USART_INT_TC))) { usart_interrupt_flag_clear(MY_USART, USART_INT_TC); usart_dma_send_finish_cb(); usart_flag_clear(MY_USART, USART_FLAG_TC); } } 当接收一批数据后,中断函数中红色这部分空闲中断代码不会执行,没找到什么原因。 有哪位大咖能指点一二。非常感谢
4759浏览量 3回复量 关注量 -
GD32F303替换STM32F303,使用ST的HAL库去编辑代码,不能运行
[i=s] 本帖最后由 wingsun1037 于 2021-5-15 12:57 编辑 [/i] 之前使用GD32F407替换STM32F407,使用的是ST的HAL库去编辑代码,可以移植到GD的上去,但使用GD32F303CCT6就不行,是GD32F303就不兼容STM32F303的库了吗,请问有哪位大神了解?
3115浏览量 3回复量 关注量 -
GD32F303的硬件IIC做从机怎么弄啊?
最近需要用GD32F303来替换stm32f103vct6,之前是使用stm32的硬件IIC做从机,现在需要换到GD32的芯片来做产品,代码移植后发现IIC没有反应,在网上找了移植手册更改了IIC部分发现没有用,是有什么地方没有改到吗?目前还是使用的stm32的库。请大家帮帮忙
4548浏览量 2回复量 关注量 -
GD32F303RCT6移植emwin后的问题 sos
[color=#444444][backcolor=rgb(239, 245, 249)][font=Tahoma, "][size=16px]GD32F303RCT6移植emwin后,可以正常显示,但旋转多边形用GUI_RotatePolygon(Param.aPoints, _aPointerHiRes, countof(_aPointer), Angle);后[/size][/font][/backcolor][/color] [color=#444444][backcolor=rgb(239, 245, 249)][font=Tahoma, "][size=16px]无论怎么改变角度,最后多没有旋转,怎么解决[/size][/font][/backcolor][/color]
1536浏览量 0回复量 关注量 -
请教GD32F303RCT6ADC在1.5M下采集频偏为2K左右
GD32F303RCT6在外部晶振为8M系统主频为120M时,ADC采样率配置为1.5M采集信号发生器150K信号,做FFT变换时频偏为2K左右
1091浏览量 2回复量 关注量 -
gd32f303做从机,两路SPI接收来自射频芯片的数据不是轮流接收 sos
gd32f303做从机,两路SPI接收来自射频芯片(主机)的数据,但是两路SPI不是依次,轮流接收,大家有遇到这种问题吗?有什么解决思路可以提供吗?(因为标题超过字数限制,所以把标题内容放到了第一段) 用的是303的SPI1 和SPI2 ,同时接收射频芯片发送的数据(一发两收)。理论上来说,应该是两个通道轮流接收的,相当于1通道接收一次2通道接收一次,121212这样轮流来。但是事实是,SPI2接收的帧数比SPI1多,SPI2接收了几次,SPI1才接收一次,做不到轮流来。想请教下站内大佬,有没有什么思路可以提供?万分感谢。
2027浏览量 0回复量 关注量