UART收发检测、IIC读取AT24C02D检测

1 UART DMA配合IDLE进行不定长度收发测试

配置UART的RX为DMA接收

#define BUF_SIZE 20
int UART1_IDLE_FLAG = 0;
 
uint8_t UART1_RECV[BUF_SIZE] = {0};

__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
HAL_UART_Receive_DMA(&huart1,UART1_RECV,sizeof(UART1_RECV));

while (1)
  {
    if(UART1_IDLE_FLAG)
    {
      HAL_UART_Transmit(&huart1,UART1_RECV,strlen(UART1_RECV),0xff);
      UART1_IDLE_FLAG = 0;
      memset(UART1_RECV,0,sizeof(UART1_RECV));
      HAL_UART_Receive_DMA(&huart1,UART1_RECV,sizeof(UART1_RECV));
    }
}
void USART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_IRQn 0 */
 if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE))
  {
     __HAL_UART_CLEAR_IDLEFLAG(&huart2);
     HAL_UART_DMAStop(&huart2);
     UART2_IDLE_FLAG = 1;
  }
  /* USER CODE END USART2_IRQn 0 */
  HAL_UART_IRQHandler(&huart2);
  /* USER CODE BEGIN USART2_IRQn 1 */

  /* USER CODE END USART2_IRQn 1 */
}

2 UART配合RXNE、IDLE接收不定长读

uint8_t UART_RECV[512] = {0};
uint8_t ch;
int len = 0;
int UART_IDLE_FLAG = 0;

  __HAL_UART_ENABLE_IT(&huart3,UART_IT_RXNE);
  __HAL_UART_ENABLE_IT(&huart3,UART_IT_IDLE);
  while (1)
  {
    if(UART_IDLE_FLAG)
    {
      HAL_UART_Transmit(&huart3,UART_RECV,len,0xff);
      UART_IDLE_FLAG = 0;
      len = 0;
    }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
void USART3_IRQHandler(void)
{
  /* USER CODE BEGIN USART3_IRQn 0 */
  if(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_RXNE))
  {
    HAL_UART_Receive(&huart3,&ch,1,0xff);
    if(len < 512)
    {
      UART_RECV[len++] = ch;
    }
    __HAL_UART_CLEAR_FLAG(&huart3,UART_FLAG_RXNE);
  }
  if(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_IDLE))
  {
    UART_IDLE_FLAG = 1;
    __HAL_UART_CLEAR_IDLEFLAG(&huart3);
  }
  /* USER CODE END USART3_IRQn 0 */
  HAL_UART_IRQHandler(&huart3);
  /* USER CODE BEGIN USART3_IRQn 1 */

  /* USER CODE END USART3_IRQn 1 */
}

3 IIC读取AT24C02D

uint8_t I2C_DATA1[256] = {0};
  uint8_t I2C_DATA2[256] = {0};
  uint8_t I2C_WriteData[256] = {0};
  int index = 0;
  int i = 0;

 //iic TEST
  while(index < 256)
  {
    I2C_WriteData[index] = index;
    index++;
  }
  HAL_I2C_Mem_Read(&hi2c1,0XA1,0x00,I2C_MEMADD_SIZE_8BIT,I2C_DATA1,256,1000);

  for(i = 0;i < 256;i++)
  {
    HAL_I2C_Mem_Write(&hi2c1,0xA0,i,I2C_MEMADD_SIZE_8BIT ,&(I2C_WriteData[i]),1, 1000); 
    HAL_Delay(5);
  }
  HAL_Delay(1000);
   HAL_I2C_Mem_Read(&hi2c1,0XA1,0,I2C_MEMADD_SIZE_8BIT,I2C_DATA2,256,1000);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值