HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
UART_HandleTypeDef *huart huart 这个参数是UART_HandleTypeDef 结构体指针类型,我们俗称其为串口句柄。串口很多数据设置保存在这个结构体中。HAL库对其进行了集成,对寄存器进行了提前设置,通常我们输入需要进行通信的串口号,这就大大方便了我们的工作。 uint8_t *pData 指针指向首字符地址的字符串(字符以8位存储),这个参数其实就是要发送的数据。 uint16_t Size 指针指向首字符地址,往后所取的地址数。就是指针指向首地址后,作为起始部分,共发送多少个字节。
uint32_t Timeout 说白了就是发送等待时间。假如是1S,则1S内如果一直没有发送,1S后就跳出这个发送函数,执行其他的指令。等待1S时间发送,如果等了1S还不发送,就不等了。以串口句柄huart1为例 ,发送”hellow word!”
可以以数组的形式定义:uint8_t str1[]="hellow word!"; 则发送函数为:HAL_UART_Transmit(&huart1,str1,sizeof(Tx_str1),500); 也可以指向首字符字符串定义: uint8_t *str2="hellow word!";//占12个字节 则发送函数为:HAL_UART_Transmit(&huart1,str1,12,500); 再看接收函数:HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
参数的意义与接收函数相同,但是接收的数据是指向字符串的首字符的指针,我们以收到4个字节数据,发送相同的4个字节数据为例:定义:uint8_t Buffer;
if(HAL_UART_Receive(&huart1,&Buffer, 4, 0xffff) == HAL_OK)
{
HAL_UART_Transmit(&huart1,&Buffer,4,1000);
}
为了方便字符串的处理,常常需要将收到的数据放入数组中进行数据处理。&Buffer是字符串的首地址,占空间是8位。指针所指的就是首地址,以收地址作为起始位置,占4个字节的数据。uint8_t Buffer;
uint8_t str[]="0";// 初始化设置为0
uint8_t *Pstr[4];
if(HAL_UART_Receive(&huart1,&Buffer, 4, 0xffff) == HAL_OK)
{
for(int i=0;i<4;i++)
{
Pstr[i]=&(Buffer)+i;
str[i]=*Pstr[i];
}
HAL_UART_Transmit(&huart1,str,4,1000);
//发送完毕后,将指针指向的数据设置为0,可以这样写
for(int i=0;i<4;i++)
{
*(&(Buffer)+i)=0;
}
注意:定义指针变量的指针变量*和使用指针变量的*意义完全不同, 例如: int *p=&a;// p是一个指针变量 *p=100;// p指针指向的数据地址(p是数据的地址,*p是指向的数据)。 或者 注:本身赋值时不能加*int *p;
P=&a;
*p=100;
则可以输出:a=100