头像-144023

donatello

  • 广东省
  • 单片机
  • 计算机网络

个人成就

获得 765 次赞

帮助过2489人

I2C七位地址问题

       我们在使用模拟I2C操作2C器件的时候,发送的器件地址通常是八位地址,最后一位地址是控制读写的,如0x80写/0x81读,0xd1写/0xd1读,但是HAL库硬件I2C是发送七位地址,那么请问,这个七位地址是通过原来的八位地址进行移位生成的吗?七位地址如何判断是读命令还是写命令?

12V转5V稳压芯片发热,是正常现象吗

使用淘宝买的那种12V转5V的模块,让12V蓄电池给STM32板子供电,可是供电久了这两个稳压芯片发热很厉害,请问这种发热是不是说明有危险呢,长期使用会损坏STM32板子吗?

HAL库硬件I2C的速度配置

       HAL库硬件I2C是可以自由配置速度的,但是有时候试了很多的值都无法调通,手头也没有逻辑分析仪可以判断速率数值是否与I2C匹配,所以,就速率问题问问大家,如果取尽量低的数值的话,会不会有I2C器件是无法接受低于某个下限的速率,导致无法调通呢?你们一般使用硬件I2C是填多大的数值呢?​

HAL库硬件I2C的两个函数用哪个

    HAL库硬件I2C直接传输的函数有HAL_I2C_Master_Transmit/Receive和HAL_I2C_Mem_Write/Read,我们知道一般有双MCU进行主从通信的话是用前者,那么,假如是MCU主控板要访问一个Arduino扩展板,上面的几个I2C器件都连在同一组I2C引脚上面,器件有OLED屏、气压传感器、温湿度传感器等,请问,这种情况下是使用HAL_I2C_Master_Transmit/Receive好呢还是HAL_I2C_Mem_Write/Read好呢?忽略模拟I2C,因为模拟I2C已经成功了。​

ADC_DMA采集多路数据问题

如题,在网上查阅资料,普遍认为ADC多路采集跟DMA是一对好搭档,因此我也认为直接套用是没什么问题的,可是弄了很久都没成功,只有单路DMA可以成功。这是什么原因呢?

STM32F4-ADC_DMA采集多路数据问题

如题,在网上查阅资料,普遍认为ADC多路采集跟DMA是一对好搭档,因此我也认为直接套用是没什么问题的,可是弄了很久都没成功,只有单路DMA可以成功。这是什么原因呢?​#define ADC1_DMA_ON 1void ADC1_Init(int channelnum){      __HAL_RCC_ADC1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); ADC1_Handler.Instance=ADC1;  ADC1_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4; //二分频  ADC1_Handler.Init.Resolution = ADC_RESOLUTION_12B; //十二位模式  ADC1_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE; //使用软件触发  ADC1_Handler.Init.DataAlign=ADC_DATAALIGN_RIGHT; //右对齐模式 ADC1_Handler.Init.ScanConvMode=DISABLE; //非扫描模式 ADC1_Handler.Init.ContinuousConvMode=ENABLE; //禁止连续转换模式 ADC1_Handler.Init.DiscontinuousConvMode=DISABLE; //禁止连续不采样模式 if(channelnum>1) ADC1_Handler.Init.NbrOfConversion=channelnum; //转换规则序列 else if(channelnum==1) ADC1_Handler.Init.NbrOfConversion=1; //只转换规则序列1   ADC1_Handler.Init.DMAContinuousRequests=ENABLE; //开启DMA请求  ADC1_Handler.Init.EOCSelection=ADC_EOC_SINGLE_CONV;   GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1;  GPIO_Initure.Mode=GPIO_MODE_ANALOG;  GPIO_Initure.Pull=GPIO_NOPULL;  HAL_GPIO_Init(GPIOA,&GPIO_Initure); #if ADC1_DMA_ON __HAL_RCC_DMA2_CLK_ENABLE();  ADC1_DMA_Handler.Instance = DMA2_Stream4;  ADC1_DMA_Handler.Init.Channel = DMA_CHANNEL_0;  ADC1_DMA_Handler.Init.Direction = DMA_PERIPH_TO_MEMORY;  ADC1_DMA_Handler.Init.PeriphInc = DMA_PINC_DISABLE;  ADC1_DMA_Handler.Init.MemInc = DMA_MINC_DISABLE; ADC1_DMA_Handler.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;  //外设数据存储格式为字(两个字节) ADC1_DMA_Handler.Init.MemDataAlignment = DMA_PDATAALIGN_WORD; //内存数据存储格式为字(两个字节) ADC1_Handler.Init.ContinuousConvMode=ENABLE; //启动连续转换模式 ADC1_DMA_Handler.Init.Mode = DMA_CIRCULAR;  ADC1_DMA_Handler.Init.Priority = DMA_PRIORITY_LOW;  ADC1_DMA_Handler.Init.FIFOMode = DMA_FIFOMODE_DISABLE;  HAL_ADC_Init(&ADC1_Handler); HAL_DMA_Init(&ADC1_DMA_Handler);  __HAL_LINKDMA(&ADC1_Handler,DMA_Handle,ADC1_DMA_Handler); #endif}int ADC1_GetValue(int channel,int chanque)   {    int val; ADC1_ChanConf.Channel=channel; ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_3CYCLES; ADC1_ChanConf.Rank=chanque; ADC1_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES; //采样时间 ADC1_ChanConf.Offset=0;                  HAL_ADC_ConfigChannel(&ADC1_Handler,&ADC1_ChanConf); ADC1status=HAL_ADC_Start(&ADC1_Handler);   if(ADC1status!=1) {#if ADC1_DMA_ON HAL_ADC_Start_DMA(&ADC1_Handler,(uint32_t*)&dma_val,1); val=dma_val; return val;#else val=(int)HAL_ADC_GetValue(&ADC1_Handler); return val;#endif } else return -1;}​

HAL库硬件I2C接口调试OLED屏不稳定

​​如题,使用STM32F4的HAL硬件I2C库调试I2C接口的OLED屏幕,有时候显示成功,有时候失败,讲道理I2C OLED的原理是主机一直写数据而不需要读,因此也就没有死等busy的问题存在,那为什么还是不稳定呢?​

8266使用CH340调试失败

使用CH340模块调试8266失败,只要CH_PD引脚连接了VCC或者外部上拉,那么就会无法找到串口,如果CH_PD引脚悬空,则串口能打开,但是收不到任何数据。请问这个是什么原因呢?