-
GD32F407使用freeRTOS死机
在GD32F407跑了freeRTOS,串口接收使用了DMA+IDLE中断来实现不定长接收,串口的IDLE中断中接收完数据后,通过事件通知线程执行解析,但是中断中调用xEventGroupSetBitsFromISR函数后就会死机
2024-05-31 56 -
HC32F460时钟模式错误出现串口乱码
使用了HC32F460PETB单片机,在批量生产中个别产品出现串口乱码情况,经排查是硬件电路设计为外部8M有源晶振,代码中en_clk_xtal_mode配置的是CLKXtalModeOsc=1u,后将代码配置修改为CLKXtalModeExtclk=1u后串口打印正常,有大神能帮忙解释下原理吗?为什么这个地方配置错误,产品会出现问题,之前小批量生产的时候没有出现乱码现象。
2024-04-28 21 -
GD32E230, VREFINT居然每次复位都会变?
以前用ADC很少用内部基准,都是尽量加一个431什么的,多用一个ADC通道读431再换算这次偷懒用了VREFINT,结果发现每次复位之后ADC采样结果相差挺大,于是单独把VREFINT的值输出到串口再换算成电压试试.一看吓一跳,标称1.2V,最低只有1.138V左右,最高1.207V左右,每次复位都不一样,复位之后倒是挺稳定的.是我哪里设置得不对吗?还是这东西就这样...
2023-11-16 81 -
GD32A503RDT3 ADC+DMA顺序转换问题,没有数据
voidrcu_config(void){/*enableGPIOclock*/rcu_periph_clock_enable(RCU_GPIOB);rcu_periph_clock_enable(RCU_GPIOE);/*enableADC0clock*/rcu_periph_clock_enable(RCU_ADC0);/*enableDMA0clock*/rcu_periph_clock_enable(RCU_DMA0);}/*!\briefconfiguretheGPIOperipheral\paramnone\param[out]none\retvalnone*/voidgpio_config(void){/*configtheGPIOasanalogmode*/gpio_mode_set(GPIOB,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,GPIO_PIN_1);//GPIOB1,gpio_mode_set(GPIOE,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,GPIO_PIN_13);}/*!\briefconfiguretheDMAperipheral\paramnone\param[out]none\retvalnone*/voiddma_config(void){/*ADC_DMA_channelconfiguration*/dma_parameter_structdma_data_parameter;/*ADCDMA_channelconfiguration*/dma_deinit(DMA0,DMA_CH0);/*initializeDMAsingledatamode*/dma_data_parameter.periph_addr=(uint32_t)(&ADC_RDATA(ADC0));//外设基地址dma_data_parameter.periph_inc=DMA_PERIPH_INCREASE_DISABLE;//内存地址增量模式dma_data_parameter.memory_addr=(uint32_t)adc_value;//数据存放地址dma_data_parameter.memory_inc=DMA_MEMORY_INCREASE_ENABLE;//内存地址增量模式dma_data_parameter.periph_width=DMA_PERIPHERAL_WIDTH_16BIT;//dma外设宽度16位,半字dma_data_parameter.memory_width=DMA_MEMORY_WIDTH_16BIT;dma_data_parameter.direction=DMA_PERIPHERAL_TO_MEMORY;//传输模式,外设到存储(接收)dma_data_parameter.number=2;//长度dma_data_parameter.priority=DMA_PRIORITY_HIGH;//优先级高dma_init(DMA0,DMA_CH0,&dma_data_parameter);dma_circulation_enable(DMA0,DMA_CH0);/*enableDMAchannel*/dma_channel_enable(DMA0,DMA_CH0);}/*!\briefconfiguretheADCperipheral\paramnone\param[out]none\retvalnone*/voidadc_config(void){/*configADCclock*/rcu_adc_clock_config(RCU_
2023-08-28 25 -
GD32E30x uart0 波特率1200时,出现乱码。
udiv=(uclk+baudval/2U)/baudval;intdiv=udiv&0x0000fff0U;fradiv=udiv&0x0000000fU;}USART_BAUD(usart_periph)=((USART_BAUD_FRADIV|USART_BAUD_INTDIV)&(intdiv|fradiv));跟中代码发现走的上面的过程uclk=180000000,intdiv=?fradiv=?1.intdiv=456,fradiv=82.intdiv=65440,fradiv=8
2023-08-19 52 -
AT32F403A DMA传输数据翻转IO速度异常
测试一下使用定时器2通道1触发DMA传输数据到GPIO实现IO口的快速翻转,目前程序中只配置了定时器触发DMA,没有其他程序,DMA配置的是循环模式,没有开中断。但是以目前的测试来看,当触发频率超过20M时,DMA的速度停留在了20M(通过观察IO翻转频率观察的),无法进一步提高,这会是什么原因呢,测试IO口翻转频率是可以达到120M的,所以可能是达到了DMA传输的最快频率导致的吗,还是说可能是我哪配置错了
2022-12-12 25 -
MPLAB X IDE中使用hexmate工具生成的16位checksum问题
请问下,我在使用hexmate生成的16位checksum与hexmate手册中CheckSum算法代码所生成checksum不一样?以下为hexmate用户手册7.1.1AdditionAlgorithms中的checksum生成代码#includetypedefuint8_tread_t;//sizeofdatavaluesreadandsummedtypedefuint16_tresult_t;//sizeofchecksumresult//addtooffset,nadditionsofvaluesstartingataddressdata,//truncatingandreturningtheresult//data:theaddressofthefirstvaluetosum//n:thenumberofsumstoperform//offset:theintialvaluetowhichthesumisaddedresult_tck_add(constread_t*data,unsignedn,result_toffset){result_tchksum;chksum=offset;while(n--){chksum+=*data;data++;}returnchksum;}实际工程中的checkSum设置:hexmate${ImagePath}-FILL=0x3FFF@0x0000:0x7FFB-CK=0x0800-0x0802@0x7FFC+0x00w-2t34g1-o${ImagePath}在MPLABXIDE的ProgramMemory窗口中查看到的0x400地址处内容为0x3184,如果按照上述checkSum计算方法得到的checksum值为B5,而使用hexmate生成的checksum值为C9请问下,到底这个hexmate生成的16位checksum算法是怎样的?
2022-07-28 7