-
使用 DMA写flash后,读取数据出现错位现象
使用DMA写flash后,读取数据出现错位现象,读到的buffer的第一节总为0,从第二字节开始才是正常数据。只能在24bit地址发送完后,再发一个DUMMY_BYTE(无效字节),才能bufferr接收数据。一但调“dma_channel_enable(DMA1,DMA_CH3)这个使能”后就出现上述现象。每次读取数据时都要先发一个DUMMY_BYTE才能正确接收。若上电不调“dma_channel_enable(DMA1,DMA_CH3)“接收都是正常的。使用的MCU是GD32F470VIT6,SPIFLAH是GD25Q40C.请各位大佬帮忙分析下。以下为SPI代码DMA配置voiddma_init(uint8_t*data_buffer,uint32_tdata_length){dma_single_data_parameter_structdma_init_struct;rcu_periph_clock_enable(RCU_DMA1);//DMA发送dma_deinit(DMA1,DMA_CH3);//DMA初始化参数设置dma_init_struct.direction=DMA_MEMORY_TO_PERIPH;dma_init_struct.memory0_addr=(uint32_t)data_buffer;dma_init_struct.memory_inc=DMA_MEMORY_INCREASE_ENABLE;dma_init_struct.periph_addr=(uint32_t)&SPI_DATA(SPI0);dma_init_struct.periph_inc=DMA_PERIPH_INCREASE_DISABLE;dma_init_struct.periph_memory_width=DMA_MEMORY_WIDTH_8BIT;dma_init_struct.number=data_length;dma_init_struct.circular_mode=DMA_CIRCULAR_MODE_DISABLE;dma_init_struct.priority=DMA_PRIORITY_MEDIUM;dma_single_data_mode_init(DMA1,DMA_CH3,&dma_init_struct);dma_channel_subperipheral_select(DMA1,DMA_CH3,DMA_SUBPERI3);//使能DMA中断通道nvic_irq_enable(DMA1_Channel3_IRQn,0,0);//配置DMA中断使能位//dma_circulation_disable(DMA1,DMA_CH3);dma_interrupt_enable(DMA1,DMA_CH3,DMA_CHXCTL_FTFIE);}DMA发送int8_tspi_dma_data_send(uint8_t*pbuffer,uint32_twrite_addr,uint16_tnum_byte_to_write){/*enablethewriteaccesstotheflash*/spi_flash_write_enable();/*selecttheflash:chipselectlow*/SPI_FLASH_CS_LOW();/*send"writetomemory"instructi
2024-11-07 15 -
rtthread 驱动 hc32f4a0 开发板上tf卡的问题。。
本帖最后由yqzq101于2024-10-1609:44编辑hello立创上请了一块谅山派的F4A0开发板。。发现rt-studio里面居然有这个开发板的支持试着创建了工程,闪了个灯一切OK想测试一下tf卡,按照网上搜的例子,打开了SDIOC1,加了fatfs,下载后,总提示如下:msh/>[E/drv.sdio]clockdivisionerror[E/drv.sdio]clockdivisionerror[E/drv.sdio][_sdio_wait_completedtimeout]sta=0x1FFE82A0,cmd0,arg:0x00000000[E/drv.sdio]clockdivisionerror[E/drv.sdio][_sdio_wait_completedtimeout]sta=0x1FFE82A0,cmd8,arg:0x000001AAclockdivisionerror[E/drv.sdio][_sdio_wait_completedtimeout]sta=0x1FFE82A0,cmd5,arg:0x00000000[E/drv.sdio][_sdio_wait_completedtimeout]sta=0x1FFE82A0,cmd55,arg:0x00000000[E/drv.sdio][_sdio_wait_completedtimeout]sta=0x1FFE82A0,cmd55,arg:0x00000000[E/drv.sdio][_sdio_wait_completedtimeout]sta=0x1FFE82A0,cmd55,arg:0x00000000[E/drv.sdio][_sdio_wait_completedtimeout]sta=0x1FFE82A0,cmd55,arg:0x00000000[E/drv.sdio][_sdio_wait_completedtimeout]sta=0x1FFE82A0,cmd1,arg:0x00000000[E/drv.sdio][_sdio_wait_completedtimeout]sta=0x1FFE82A0,cmd1,arg:0x00000000[E/drv.sdio][_sdio_wait_completedtimeout]sta=0x1FFE82A0,cmd1,arg:0x00000000请问这是为啥。。是我哪里没改好吗谢谢
2024-10-16 7 -
GD32f303rct6 RTC问题。
我准备用兆易的GD32F103rct6,RTC时钟,它的时钟32.768晶振的选择是不是和STM32F103一样容易出现问题,不起振?在选择晶振时应注意什么?
2024-10-12 10 -
gd32vf103使用的RISCV核自带的内部定时器timer疑问
timer内部计数器是自增的,位宽64位,溢出后是从0开始吗?有知道的小伙伴吗?官方参考手册也没有说明。
2024-09-25 17 -
eclipse代码中的乱码影响编译,怎么消除?
如图:
2024-09-13 7 -
GD32F105代码移植到103
因为我的新产品不需要OTG功能,我想把原来在GD32F105下开发的代码移植到GD32F103上去,但KEIL里总是提示L6404E错误存储溢出,哪位大佬熟悉代码优化呢
2024-09-07 9 -
GD32E230作为IIC从机时接收数据会卡顿是什么原因
在配置完成IIC从机模式后,主机向从机发送9位数据,在从机收到数据后主函数的代码会跑不到,不知道在什么地方造成了阻塞,接收完毕会产生多次的STPDEF中断吗,但是IIC从机模式的故障应该也不会影响到主函数的运行才对,有没有懂的大佬帮忙分析一下谢谢,代码如下#include"gd32e230.h"#defineMSG_RECV_BYTE_SUM9#defineMSG_SEND_BYTE_SUM6#defineI2C0_OWN_ADDRESS70x44voidiic_msg_gpio_config_init(void){/*enableGPIOBclock*/rcu_periph_clock_enable(RCU_GPIOB);/*enableI2C0clock*/rcu_periph_clock_enable(RCU_I2C0);/*connectPB6toI2C0_SCL*/gpio_af_set(GPIOB,GPIO_AF_1,GPIO_PIN_6);/*connectPB7toI2C0_SDA*/gpio_af_set(GPIOB,GPIO_AF_1,GPIO_PIN_7);/*configureGPIOpinsofI2C0*/gpio_mode_set(GPIOB,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_6);gpio_output_options_set(GPIOB,GPIO_OTYPE_OD,GPIO_OSPEED_50MHZ,GPIO_PIN_6);gpio_mode_set(GPIOB,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_7);gpio_output_options_set(GPIOB,GPIO_OTYPE_OD,GPIO_OSPEED_50MHZ,GPIO_PIN_7);/*I2Cclockconfigure*/i2c_clock_config(I2C0,400000,I2C_DTCY_2);/*I2Caddressconfigure*/i2c_mode_addr_config(I2C0,I2C_I2CMODE_ENABLE,I2C_ADDFORMAT_7BITS,I2C0_OWN_ADDRESS7);/*enableI2C0*/i2c_enable(I2C0);/*enableacknowledge*/i2c_ack_config(I2C0,I2C_ACK_ENABLE);nvic_irq_enable(I2C0_EV_IRQn,23);nvic_irq_enable(I2C0_ER_IRQn,32);/*enabletheI2C0interrupt*/i2c_interrupt_enable(I2C0,I2C_INT_ERR);i2c_interrupt_enable(I2C0,I2C_INT_EV);i2c_interrupt_enable(I2C0,I2C_INT_BUF);}voidi2c0_event_irq_handler(void){if(i2c_interrupt_flag_get(I2C0,I2C_INT_FLAG_ADDSEND)){//0:接收端//1:发送端tI2cSlave.uFlag.Bits.DirState=i2c_flag_get(I2C0,I2C_FLAG_TR);if(tI2cSlave.uFlag.Bits.DirState==RESET){msg_iic_recv
2024-08-29 9 -
GD32F407ZGT6硬件引脚可以完全替代STM32F407ZGT6吗?
以前项目的板子用的STM32F407ZGT6,现在要求主控芯片必须国产化,想直接替换成GD32F407ZGT6,不改变原先的外围电路,请问大佬们有尝试过的嘛,可以的话那就太省事了,我先给大家鞠个躬吧!!!
2024-08-28 49 -
hc32f460 can导致单片机复位
can使能后发送数据,如果can总线上没有其他节点接收数据,单片机直接重启。接上接收设备后,单片机正常工作。can配置代码如下//CANConfigstaticvoidApp_CANCfg(void){stc_can_init_tstcCanInit;/*************************ConfigureCAN1***************************/stc_can_filter_config_tastcFilter1[1U]={{0x1UL,0x0000UL,CAN_ID_STD},};/*InitializesCAN.*/(void)CAN_StructInit(&stcCanInit);stcCanInit.stcBitCfg.u32Prescaler=12U;stcCanInit.stcBitCfg.u32TimeSeg1=5U;stcCanInit.stcBitCfg.u32TimeSeg2=3;stcCanInit.stcBitCfg.u32SJW=3;stcCanInit.pstcFilter=astcFilter1;stcCanInit.u16FilterSelect=CAN_FILTER1;stcCanInit.u8WorkMode=CAN_WORK_MD_NORMAL;//CAN_WORK_MD_ELB;stcCanInit.u8PTBSingleShotTx=CAN_PTB_SINGLESHOT_TX_ENABLE;stcCanInit.u8STBSingleShotTx=CAN_STB_SINGLESHOT_TX_ENABLE;stcCanInit.u8STBPrioMode=CAN_STB_PRIO_MD_DISABLE;stcCanInit.u8RxWarnLimit=10U;stcCanInit.u8ErrorWarnLimit=15U;stcCanInit.u8RxAllFrame=CAN_RX_ALL_FRAME_DISABLE;stcCanInit.u8RxOvfMode=CAN_RX_OVF_DISCARD_NEW;stcCanInit.u8SelfAck=CAN_SELF_ACK_DISABLE;/*EnableperipheralclockofCAN.*/FCG_Fcg1PeriphClockCmd(FCG1_PERIPH_CAN,ENABLE);(void)CAN_Init(CM_CAN,&stcCanInit);CAN_ExitLocalReset(CM_CAN);/*Enabletheinterrupts,thestatusflagscanberead.*/CAN_IntCmd(CM_CAN,CAN_INT_ALL,DISABLE);CAN_IntCmd(CM_CAN,CAN_INT_ERR_INT|CAN_INT_RX_BUF_WARN|CAN_INT_RX|CAN_INT_BUS_ERR,ENABLE);}
2024-08-27 13 -
GD32H737 SPI datasize = 16 bit时无法收发
这段代码执行的是SPI收发功能,使用仿真器debug时会停在spi_i2s_data_receive处(等待接收标志位),但是如果把datasize改成8bit就能正常收发数据,请问是什么原因呢?uint32_tSpi_Transfer16(SPI_BusDef*spi,uint16_t*TxBuf,uint16_t*RxBuf,uint16_tlen){uint32_tret=0;Spi_Nss(spi->Nss,0);spi_master_transfer_start(spi->Periph,SPI_TRANS_START);for(inti=0;iPeriph)&SPI_FLAG_TP));spi_i2s_data_transmit(spi->Periph,TxBuf);RxBuf=spi_i2s_data_receive(spi->Periph);}while(RESET==spi_i2s_flag_get(spi->Periph,SPI_FLAG_TC));Spi_Nss(spi->Nss,1);returnret;}
2024-08-12 12 -
gd32f470怎么禁用串口0的调试功能
再调试过程中发现再使用串口0收发数据时,如果调用复位函数NVIC_System_Reset()就会导致程序网络不通,而且也没有复位重启,串口0停止收发数据就不会出现这个问题,而且其他串口均不存在这个问题,怀疑是不是串口0有调试串口的功能,还是别的什么原因导致的。
2024-08-07 15 -
将STM32移植到了GD32上。怎么验证i2c功能呢?
将STM32的工程移植到了GD32F103ZET6上,但只有一个GD32系统板,没有接外围的I2C设备(硬件组还没有回板)。怎么靠系统板验证移植的i2c功能呢?谢谢
2024-08-06 13