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);