问答

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

miltk

TA的家园币:218  

  • GD32F303 SPI DMA 条件下如何配置8位的CRC

    如题GD32F303SPIDMA条件下如何配置8位的CRC,我的配置如下voidSpi1_init(){spi_parameter_structspi_init_struct;/*deinitilizeSPIandtheparameters*/spi_i2s_deinit(SPI1);spi_struct_para_init(&spi_init_struct);rcu_periph_clock_enable(RCU_GPIOB);rcu_periph_clock_enable(RCU_SPI1);rcu_periph_clock_enable(RCU_AF);/*configureSPI1GPIO:NSS/PB12,SCK/PB13,MISO/PB14,MOSI/PB15*/gpio_init(GPIOB,GPIO_MODE_AF_PP,GPIO_OSPEED_MAX,GPIO_PIN_13|GPIO_PIN_15);/*SPI1GPIOconfig:SCK/PB13,MOSI/PB15*/gpio_init(GPIOB,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_MAX,GPIO_PIN_14);/*SPI1GPIOconfig:MISO/PB14*/gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_MAX,GPIO_PIN_12);/*PB12asCS*/SPI1_CS_H;spi_init_struct.trans_mode=SPI_TRANSMODE_FULLDUPLEX;spi_init_struct.device_mode=SPI_MASTER;spi_init_struct.frame_size=SPI_FRAMESIZE_8BIT;spi_init_struct.clock_polarity_phase=SPI_CK_PL_LOW_PH_1EDGE;//SPI接口逻辑在时钟极性(CPOL)=0和时钟相位(CPHA)=0的情况下运行spi_init_struct.nss=SPI_NSS_SOFT;//注意SPI_NSS_HARD是指外部的CS也就是说对从机有效主机应该使用SPI_NSS_SOFTspi_init_struct.prescale=SPI_PSC_32;spi_init_struct.endian=SPI_ENDIAN_MSB;//大端spi_init(SPI1,&spi_init_struct);/*setcrcpolynomial*/spi_crc_polynomial_set(SPI1,7);spi_crc_on(SPI1);/*enableSPI1*/spi_enable(SPI1);}我使用了,可是实际上示波器没有监测到下发的正常校验结果spi_crc_polynomial_set(SPI1,7);spi_crc_on(SPI1);发送数据填充{Afex->Spi_Txbuf[0]=Afex->Aevaddr;Afex->Spi_Txbuf[1]=0xFF;//Afex->Spi_Txbuf[2]=CRC8(Afex->Spi_Txbuf,2);AFE1_CS_L;SPI1_TransmitReceiveDma(Afex->Spi_Txbuf,Afex->Afe_Rxbuf,2);AFE1_CS_H;}//DMA数据填充和发送使能等这里用了个信号量阻塞uint8_tSPI1_TransmitReceiveDma(cons

    GD32F303 CRC spi DMA

    2024-08-08 18
  • 沁恒ch32v307无法实现hc-sr04超声波测距,大家帮忙看看

    //超声波测距模块==============================================================//system.cu16count=0;voidTIM2_IRQHandler(void)__attribute__((interrupt("WCH-Interrupt-fast")));voidultrasonic_Init(u16arr,u16psc)//初始化{//初始化结构体GPIO_InitTypeDefGPIO_InitStructure;TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;NVIC_InitTypeDefNVIC_InitStructure;//使能IM2时钟RCC_APB1PeriphClockCmd(ultrasonic_RCC|RCC_APB1Periph_TIM2,ENABLE);//配置GPIO_InitStructure.GPIO_Pin=ultrasonic_Pin;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(ultrasonic_GPIOx,&GPIO_InitStructure);GPIO_ResetBits(ultrasonic_GPIOx,ultrasonic_Pin);GPIO_InitStructure.GPIO_Pin=ultrasonic_Pin_t;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(ultrasonic_GPIOx,&GPIO_InitStructure);GPIO_ResetBits(ultrasonic_GPIOx,ultrasonic_Pin|ultrasonic_Pin_t);TIM_DeInit(TIM2);//定时器周期,实际就是设定自动重载寄存器ARR的值,ARR为要装载到实际自动重载寄存器(即影子寄存器)的值,可设置范围为0至65535。TIM_TimeBaseInitStructure.TIM_Period=arr;//定时器预分频器设置,时钟源经该预分频器才是定时器计数时钟CK_CNT,它设定PSC寄存器的值。//计算公式为:计数器时钟频率(fCK_CNT)等于fCK_PSC/(PSC[15:0]+1),可实现1至65536分频。TIM_TimeBaseInitStructure.TIM_Prescaler=psc;//时钟分频,设置定时器时钟CK_INT频率与死区发生器以及数字滤波器采样时钟频率分频比。可以选择1、2、4分频。TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//设置计数模式,向上计数模式//TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0x00;//设置重复计数器的值,0

  • [APM32F030R8][求助]关于USART使能后直接进入空闲中断

    板子用的是APM32F030R8MINIBoard给USART配置空闲中断,USART使能后就会进入一次空闲中断。代码如下:intmain(void){GPIO_Config_TgpioConfig;USART_Config_TusartConfigStruct;RCM_EnableAHBPeriphClock(MINI_COM1_RX_GPIO_CLK);RCM_EnableAPB2PeriphClock(MINI_COM1_CLK);//GPIO_ConfigPinAF(MINI_COM1_TX_GPIO_PORT,MINI_COM1_TX_SOURCE,MINI_COM1_TX_AF);GPIO_ConfigPinAF(MINI_COM1_RX_GPIO_PORT,MINI_COM1_RX_SOURCE,MINI_COM1_RX_AF);gpioConfig.mode=GPIO_MODE_AF;//gpioConfig.pin=MINI_COM1_TX_PIN;gpioConfig.speed=GPIO_SPEED_50MHz;gpioConfig.outtype=GPIO_OUT_TYPE_PP;gpioConfig.pupd=GPIO_PUPD_PU;//GPIO_Config(MINI_COM1_TX_GPIO_PORT,&gpioConfig);gpioConfig.pin=MINI_COM1_RX_PIN;GPIO_Config(MINI_COM1_RX_GPIO_PORT,&gpioConfig);usartConfigStruct.baudRate=110;usartConfigStruct.mode=USART_MODE_RX;usartConfigStruct.hardwareFlowCtrl=USART_FLOW_CTRL_NONE;usartConfigStruct.parity=USART_PARITY_NONE;usartConfigStruct.stopBits=USART_STOP_BIT_1;usartConfigStruct.wordLength=USART_WORD_LEN_8B;USART_Config(MINI_COM1,&usartConfigStruct);NVIC_EnableIRQRequest(MINI_COM1_IRQn,2);USART_Enable(MINI_COM1);//Delay(0xfff);Delay(0xfffffff);USART_EnableInterrupt(MINI_COM1,USART_INT_IDLEIE);while(1){}}CSDN上找到一篇是说USART使能发送功能会发送一个空闲帧,解决方法是使能串口,延迟一会再使能空闲中断。但那篇文章中用的是STM32,而且是自收发。我用APM32禁用USART发送功能再使能后还是会进入空闲中断。原因应该不是CSDN那篇文章里的,但用延迟确实能解决,就是延迟的时间要设置的很大。CSDN文章链接:https://blog.csdn.net/weixin_38106263/article/details/129234153?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171705336916800186593920%2522%252C%2522

  • 有没有GD32H7 的 RGB 接口LVGL 例子,更新屏幕太折腾

    前端时间在调试GD32H7,可是发现使用TLI时还是存在问题,调了很久最后放弃了由于H7的架构有多种内存块,使用不当就存在问题开始使用外部RAM存放显存,一直没成功,后来没办法使用内部RAM单显存测试,还是不行,屏幕显示经常有马赛克,感觉这个TLI配置起来太麻烦了有TLI有2个图层,使用的时候即使用一个图层,2个图层还是必须要都要配置,不配置还不行因为2个图层后面有个混合更新输出的时候也比较扯。在使用LVGL时,使用单格全屏显示缓存,我配置了TLI的2个图层,仅使用1个图层输出,然后再输出时使用tli_reload_config(TLI_FRAME_BLANK_RELOAD_EN);来触发TLI更新输出,但是有问题,无法显示,这就很扯,首先也不知道什么时候更新完成?然后调用这个没有效果有没有H7的LGVL的例子学习一下?

    使用 更新 接口 LVGL RGB GD32H7

    2024-05-11 15