问答

汇集网友智慧,解决技术难题

duo点

TA的家园币:4580  

  • 使用 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

    DMA 读取SPI flash 异常 读取

    2024-11-07 15
  • gd32f303cct6有源晶振无法稳定问题

    gd32f303cct6使用16M有源晶振输入到OSCIN引脚后在启动时候HXTALSTB始终无法值1,然后卡死在system_gd32f30x.c文件中iffail的这个死循环里,是这款单片机不支持有源晶振吗,使用示波器测量过芯片OSCIN引脚有峰峰值为1V的16MHZ波形,并且稳定,圆角的方波

  • 关于gd32 f4的adc 交替采样采样问题

    有没有前辈有相关的例程呢,小弟我这边一直调试不通,官方给的代码也只有同步采样的,并没有涉及到多重adc交替采样,希望大佬们不吝赐教

  • 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;}

  • MM32SPIN系统高级定时器输入捕获 没办法进入TIM_CC_IRQH中断

    MM32SPIN系统单片机高级定时器输入捕获没办法进入TIM_CC_IRQH中断voidRemote_1(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);//使能GPIOB时钟GPIO_PinAFConfig(GPIOB,GPIO_PinSource4,GPIO_AF_7);//GPIOB4复用为TIM1//GPIOGPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//下拉输入GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);}voidRemote_Init(uint16_tperiod,uint8_tprescaler){TIM_TimeBaseInitTypeDefTIM_StructInit;TIM_ICInitTypeDefTIM_ICInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);TIM_TimeBaseStructInit(&TIM_StructInit);TIM_StructInit.TIM_Period=period;TIM_StructInit.TIM_Prescaler=prescaler;TIM_StructInit.TIM_ClockDivision=TIM_CKD_DIV1;TIM_StructInit.TIM_CounterMode=TIM_CounterMode_Up;TIM_StructInit.TIM_RepetitionCounter=0;TIM_TimeBaseInit(TIM1,&TIM_StructInit);//TIM1输入捕获参数设置TIM_ICInitStructure.TIM_Channel=TIM_Channel_2;//CC2S=01选择输入端IC2映射到TI1上TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;//上升沿捕获TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;//映射到TI1上TIM_ICInitStructure.TIM_ICFilter=0x0;TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;//配置输入分频,不分频TIM_ICInit(TIM1,&TIM_ICInitStructure);TIM_ARRPreloadConfig(TIM1,ENABLE);TIM_ITConfig(TIM1,TIM_IT_CC2|TIM_IT_Update,ENABLE);TIM_CtrlPWMOutputs(TIM1,ENABLE);TIM_Cmd(TIM1,ENABLE);}voidRemote_2(void){NVIC_InitTypeDefNVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel=TIM1_BRK_UP_TRG_COM_IRQn;//定时中断3NVIC_InitStructure.NVIC_IRQChannelPriority=1;//中断优

  • CW32L083 IAP跳转后中断无响应

    最近做一个项目,需要IAP。按照官方的教程一切顺利,软件APP跳转一切正常,但是跳转后中断没有响应。搜索了一堆资料,APP在mian中找开了中断,在不同地方设置VROT,都没能解决,查了数据手册,也只说支持向量偏移,没有其它介绍。请问哪位大神做过IAP中断处理的,指点一下,是不是还需要设置哪里。我用仿真器测试,只要是带中断的,跳转后,中断全部无响应。

    软件 介绍 AN App CW32L083 iap

    2024-06-08 10
  • 4014触摸芯片EZI2C从机拉低主控SCL不释放

    主控芯片采用GPIO去模拟I2C主机,4014采用EZI2C硬件从机;主控每隔20ms去读一次从机数据,运行过程中会出现SCL被拉低不释放的问题,通过测量发现是4014拉低了SCL;请问什么情况下4014EZI2C从机会拉低SCL不释放?

  • GD32F305ZET6 MCU跑死后,系统复位不响应

    Hi各位大牛,一个项目上用到GD32F305ZET6这款单片机,最近遇到个很困惑的问题描述如下:1、QFP-144pin封装,只用到PA0(wakeuppin),ADC、I2C、UART以及少部分GPIO作为输入输出,12M的无源晶振作为MCU时钟,3.3V供电;2、常温环境下,上电运行一切正常,跑了一段时间后发现MCU已经跑死,不响应外围IO上的高低电平信号,UART等接口均无响应;3、按下NRST复位开关,MCU仍没有任何响应;4、加看门狗后发现出问题时,看门口也无法复位;5、电源供电,NRST电路等均按照手册要求设计,时钟波形均测量正常,并且没有发现异常case;6、没有找到导致MCU跑死的必发路径,询问原厂FAE说可能是cache有问题,所以即使复位NRST管脚也不会重新加载cache,单问题是什么情况会导致cache异常,除cache外还有没有其他可能异常点;综合看起来像是硬件上出问题了,这种情况还是第一次遇到。以上,请各路大神帮忙看一下什么问题,谢谢!

  • GD32L233移植FreeRTOS普通定时器中断无法进入

    GD32L233移植FreeRTOS,用定时器2做延时函数在线调试发现无法进入TIMER2的中断服务函数。

    嵌入式 单片机

    2023-09-20 6
  • GD32E230F8P6 USART1初始化后无法使能接收

    GD32E230F8P6PA2,PA3设置为AF1功能(USART1)初始化后无法使能接收,在STAT寄存器中查看可以发现REA为0,TEA为1;相同的代码设置USART0(PA9,PA10)则正常,在STAT寄存器中REA、TEA均为1。C:\Users\HWEngineer\Desktop\USART1_REA_fail.png

    GD32 GD32E230 USART1 REA

    2023-09-14 3
  • 小华单片机HC32F460的跑官方例程时会发送不成功

    目前在调试HC32F460时会卡在如下代码:在while(CAN_GetStatus(CAN_UNIT,CAN_FLAG_STB_TX)==RESET){},哪位大佬可以指点一下吗?staticvoidCanTx(void){uint8_ti;staticuint8_tu8Data;for(i=0U;i<CAN_TX_DATA_SIZE;i++){m_stcTx1.au8Data=u8Data++;m_stcTx2.au8Data=u8Data++;m_stcTx3.au8Data=u8Data++;}/*FramewithCAN_ID1*/m_stcTx1.u32Ctrl=0x0UL;m_stcTx1.u32ID=CAN_TX_ID1;m_stcTx1.IDE=CAN_TX_ID1_IDE;m_stcTx1.DLC=CAN_TX_DLC;(void)CAN_FillTxFrame(CAN_UNIT,CAN_TX_BUF_PTB,&m_stcTx1);/*StartPTBTX*/CAN_StartTx(CAN_UNIT,CAN_TX_REQ_PTB);/*Checktransmissionend.*/while(CAN_GetStatus(CAN_UNIT,CAN_FLAG_PTB_TX)==RESET){}CAN_ClearStatus(CAN_UNIT,CAN_FLAG_PTB_TX);/*FramewithCAN_ID2*/m_stcTx2.u32Ctrl=0x0UL;m_stcTx2.u32ID=CAN_TX_ID2;m_stcTx2.IDE=CAN_TX_ID2_IDE;m_stcTx2.DLC=CAN_TX_DLC;(void)CAN_FillTxFrame(CAN_UNIT,CAN_TX_BUF_STB,&m_stcTx2);/*FramewithCAN_ID3*/m_stcTx3.u32Ctrl=0x0UL;m_stcTx3.u32ID=CAN_TX_ID3;m_stcTx3.IDE=CAN_TX_ID3_IDE;m_stcTx3.DLC=CAN_TX_DLC;(void)CAN_FillTxFrame(CAN_UNIT,CAN_TX_BUF_STB,&m_stcTx3);/*StartSTBTX*/CAN_StartTx(CAN_UNIT,CAN_TX_REQ_STB_ALL);/*Checktransmissionend.*/while(CAN_GetStatus(CAN_UNIT,CAN_FLAG_STB_TX)==RESET){}CAN_ClearStatus(CAN_UNIT,CAN_FLAG_STB_TX);}

    hc32f460 CAN

    2023-03-02 6
  • 程序跑飞,不能调试是什么原因?

    MCU的系统时钟从默认的8MHz改为48MHz后,程序跑飞,不能调试是什么原因?

  • Mbed串口驱动安装失败

    请问windows1064bit电脑安装Mbed串口驱动(mbedWinSerial_16466.exe)怎么解决?谢谢!

  • HC32L110深度睡眠喂狗问题

    HC32L110进入深度睡眠后,看门狗还会不会工作,如果工作的话,是不是会复位芯片呢?进入睡眠前是不是在关闭看门狗?

    hc32l110 RTC

    2022-01-12 11