-
使用 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 -
GD32F303RCT6 USART0的空闲中断进不去,仿真打断点也进不去中断
intmain(void){//¿ÉÒÔ×öµ½´«ÊäÊý¾Ý³öÀ´£¬¶¨µã´«ÊäÊý¾Ý³öÀ´uint32_tStatus2=0;uint32_tStatus3;uint16_tx;dma_parameter_structdma_init_struct2;gpio_pin_remap_config(GPIO_SWJ_NONJTRST_REMAP,ENABLE);//ÏÂÔØ¿ÚNJTRSTÒý½Åµ±×öÆÕͨI/O¿Úrcu_ahb_clock_config(RCU_AHB_CKSYS_DIV1);systick_config();//1mssystickgpio_config();//PA1,PA2,PA3¹Ü½ÅÅäÖÃ/************************************************///UART0_initrcu_periph_clock_enable(RCU_AF);//Need!!!!//usart_halfduplex_enable(USART0);rcu_periph_clock_enable(RCU_USART0);//ʹÄÜUSART0ʱÖÓgpio_pin_remap_config(GPIO_USART0_REMAP,ENABLE);usart_deinit(USART0);//³õʼ»¯//¸´Î»Ê±ÖÓusart_baudrate_set(USART0,19200U);//¶¨Ò岨ÌØÂÊusart_receive_config(USART0,USART_RECEIVE_ENABLE);//½ÓÊÕʹÄÜusart_transmit_config(USART0,USART_TRANSMIT_ENABLE);//·¢ËÍʹÄÜusart_interrupt_enable(USART0,USART_INT_TC);//·¢ËÍÍê³ÉÖжÏusart_interrupt_enable(USART0,USART_INT_IDLE);//¿ÕÏÐÖжÏusart_enable(USART0);//Ä£¿éʹÄÜUSART_INT_TCnvic_irq_enable(USART0_IRQn,0,1);RX0_DMAquest_StartOrInit();TX0_DMAquest_StartOrInit();usart_dma_receive_config(USART0,USART_DENR_ENABLE);usart_dma_transmit_config(USART0,USART_DENT_ENABLE);//NVICEXTI_config();//timer_interrupt_flag_clear(TIMER0,TIMER_INT_FLAG_CH0);//timer_interrupt_enable(TIMER0,TIMER_INT_CH0);//usart_dma_transmit_config(USART0,USART_DENT_ENABLE);//usart_dma_receive_config(USART0,USART_DENR_ENABLE);/******************************************************//*configureDMAmode*///dma_circulation_disable(DMA1,DMA_
2024-11-06 10 -
gd55B01GE超出64MB读写异常
gd55B01GE在低于64MB的地址读写均正常,使用4字节模式,但地址超过64M(即0x4000000)后的地址就读写异常了,有的地址能读写出来,有的不行,是地址有保护吗,我试着解除了保护也不行,有没有大佬知道怎么回事,如何解决
2024-08-06 7 -
4014触摸芯片EZI2C从机拉低主控SCL不释放
主控芯片采用GPIO去模拟I2C主机,4014采用EZI2C硬件从机;主控每隔20ms去读一次从机数据,运行过程中会出现SCL被拉低不释放的问题,通过测量发现是4014拉低了SCL;请问什么情况下4014EZI2C从机会拉低SCL不释放?
2024-02-23 7 -
HC32L130 GCC编译的hex文件下载无反应
由于版权问题,不能用keil。官方的例程中没有GCC的启动文件和ld文件,从论坛中下载了一份。成功生成hex文件并下载成功,但没反应。不晓得是不是生成hex文件的问题。附上cmakeset(CMAKE_SYSTEM_NAMEGeneric)cmake_minimum_required(VERSION3.21)project(HC32L130CASM)set(CMAKE_C_COMPILERarm-none-eabi-gcc)set(CMAKE_CXX_COMPILERarm-none-eabi-g++)set(CMAKE_ASM_COMPILERarm-none-eabi-gcc)set(CMAKE_C_FLAGS_DEBUG"-O0-g2-ggdb")set(CMAKE_C_FLAGS_RELEASE"-O0")set(CMAKE_CXX_STANDARD17)set(CMAKE_C_STANDARD99)include_directories(CMSIS/IncComponents/BSP/IncDriver/Inc${CMAKE_CURRENT_BINARY_DIR})file(GLOB_RECURSEhc32l130libCONFIGURE_DEPENDSCMSIS/Src/*.cDriver/Src/*.c)file(GLOB_RECURSEbspCONFIGURE_DEPENDSComponents/BSP/Src)aux_source_directory(${CMAKE_SOURCE_DIR}/mainmain)set(startup${CMAKE_SOURCE_DIR}/startup_hc32L13x.S)set(LINKER_SCRIPT${CMAKE_SOURCE_DIR}/HC32L130.ld)set(MAP_FILE${PROJECT_NAME}.map)set(CMAKE_C_FLAGS"-mlong-calls-fno-common-mcpu=cortex-m0plus-mthumb-ffunction-sections-fdata-sections")set(CMAKE_EXE_LINKER_FLAGS"-mcpu=cortex-m0plus-mthumb-ffunction-sections-T${LINKER_SCRIPT}-Xlinker--gc-sections-Wl,-Map,${MAP_FILE}--specs=nano.specs--specs=nosys.specs")set(CMAKE_EXE_LINKER_FLAGS_INIT"-mcpu=cortex-m0plus-mthumb-nostartfiles-ffunction-sections-Xlinker--gc-sections--specs=nano.specs--specs=nosys.specs--print-memory-usage")set(HEX_FILE${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)add_executable(${PROJECT_NAME}.elf${main}${hc32l130lib}${bsp}${startup}${LINKER_SCRIPT})add_custom_command(TARGET${PROJECT_NAME}.elfPOST_BUILDCOMMAND${CMAKE_OBJCOPY}-Oihex$${HEX_FILE}COMMENT"Building${HEX_FILE}")
2024-02-23 7 -
MM32G0001 PA0引脚复用USART1_RX失灵,各位有没有遇到过
如题
2024-01-13 11 -
HC32L110 采集ADC有可能一直没有值吗
先说现象:1.试产了1000个大约有20个,ADC采样一直通不过。复位以后程序又正常工作,采样正常。2.对不能正常工作的产品测量对应引脚:(1)引脚上模拟信号量在变化,0~3V。(2)ADC连续转换中断有产生,因为我的程序在转换完成中断会关闭ADC使能,把检测口关闭。还把光敏电阻的电源关闭。通过测量光敏电阻电源,和引脚上的变化。确定ADC程序在运行,正常结束。程序结构:1.上电后初始化ADC功能。关闭ADC。因为是低功耗项目,所以不用的时候都关闭了外设。2.在需要的时候,开启转换。转换完成中断后,把ADC值保存在数组中,关闭ADC。3.程序任务判断ADC的值,做出对应动作。出错在这里,外部模拟量变化,这里没有反应。我怀疑是我的ADC设置不对,但是又没有找到哪不对。其中,我实际使用中因为不停的开关BGR,发现BGR的使能时间对结果影响非常大。我实际测试当BGR使能时间大于1ms,结果比较稳定。我程序中是使能了1.5ms才开启的转换。实际电路中因为输入阻抗大,所以程序开启了电压跟随器功能。看具体的操作:需要转换时:开启光敏电源使能对应扫描通道使能ADC时钟使能ADC使能BGR延时1.5ms清除ADC连续转换完成中断标志中断使能复位ADC连续转换状态启动ADC转换ADC中断程序:清除连续转换完成中断获取对应通道ADC值保存在数组中。禁止BGR禁止ADC禁止ADC时钟禁止ADC中断关闭光敏电源使用时:取ADC数据赋给局部变量局部变量参与运算,判断数据在哪个区间段根据区间段做出对应动作。最后,希望有大佬能提供思路。我在考虑是不是要周期性重新初始化ADC,但是这个是治标不治本的办法,我没有找到为什么会出现这个。
2023-12-20 12 -
st移植到GD32f450zgt6 CAN初始化不通过
st的程序移植到GD32f450zgt6can在初始化那里不通过主状态寄存器没有反应有人遇到过这个问题没
2023-09-18 6 -
GD32E230 keil5使用J-link调试找不到芯片ID
j-link固件版本V9.6,dllV6.7,keil版本5.35。正确连接J-link后找不到芯片IDcode。Jflash也连接不了单片机。
2023-02-22 13 -
请教HC32M120怎么使用UART+DMA
如题
2021-09-15 4 -
MM32F031f6p6 GPIO没电平输出
用MM32F031f6p6代替stm32f030f4P6出现GPIO口电平没输出,我是直接用stm32f030f4p6工程来调试mmf031f6p6的。voidgpio_delay(intcnt){while(cnt--);}voidgpio_init(void){GPIO_InitTypeDefout;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);out.GPIO_Pin=GPIO_Pin_7;out.GPIO_Mode=GPIO_Mode_OUT;out.GPIO_Speed=GPIO_Speed_10MHz;GPIO_Init(GPIOA,&out);while(1){GPIO_SetBits(GPIOA,GPIO_Pin_7);gpio_delay(60000);GPIO_ResetBits(GPIOA,GPIO_Pin_7);gpio_delay(60000);}}用官网的代码,用st-linkdebug程序没点击keil的start按钮就直接运行,也会报错,这会是什么问题?上传不了图片官网工程路径:Boards_MM32F031xx_q\MBF031C6T_q_lib\EXTI\EXTI_KEY\KEIL_PRJ
2021-07-07 9 -
华大半导体的HC32F4A0怎么能买到?
华大半导体的HC32F4A0怎么能买到?想用这个来替换原来ST的芯片。谢谢!
2020-12-09 10 -
CC2640的I2C问题请教
我用CC2640的I2C模块给OPT3001光照芯片写值,发现写不进去。该芯片寄存器是16位的,咱I2C模块可以写16位寄存器的值吗???我就想给0x01寄存器写个0x54,0x10,代码如下:voidSet_OPT3001(uint8_tlimit){Reset_OPT3001_Register();txBuffer[0]=0x54;txBuffer[1]=0x10;i2cTrans.writeCount=3;i2cTrans.writeBuf=txBuffer;i2cTrans.readCount=0;i2cTrans.readBuf=rxBuffer;i2cTrans.slaveAddress=0x44;I2C_transfer(handle,&i2cTrans);}
2020-12-08 4 -
Chip on IDE KF32 GPIO初始化问题
这个初始化是不是定义的输入口全部上拉,为什么只有定义的最后一个输入口有上拉,前面的口都没有上拉,求解voidGPIOInit_Input_Config(GPIO_SFRmap*GPIOx,uint16_tGpioPin){/*初始化复位GPIOx外设,使能GPIOx外设时钟*/GPIO_Reset(GPIOx);/*配置Pxy作为输入模式*/GPIO_InitTypeDefGPIO_InitStructure;//GPIO_Struct_Init(&GPIO_InitStructure);GPIO_InitStructure.m_Pin=GpioPin;GPIO_InitStructure.m_Speed=GPIO_LOW_SPEED;//初始化GPIO输出速度GPIO_InitStructure.m_Mode=GPIO_MODE_IN;//初始化GPIO方向为输入GPIO_InitStructure.m_PullUp=GPIO_PULLUP;//GPIO_NOPULL;//初始化GPIO是否上拉不上拉GPIO_InitStructure.m_PullDown=GPIO_NOPULL;//GPIO_PULLUP;//初始化GPIO是否下拉不下拉GPIO_Configuration(GPIOx,&GPIO_InitStructure);}搜索复制
2020-12-03 14