HAL_StatusTypeDef HAL_Receive_IT(UART_HandleTypeDef *huart, uint8_ *pData, uint16_t size)
{
if (huart->RxState == HAL_UART_STATE_REDAY)
{
if ((pData == Null)) || (size == 0U)
{
return HAL_ERROR;
}
__HAL_LOCK(huart);
huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
return (UART_Start_Receive_IT(huart, pData, Size));
}
else
{
return HAL_BUSY;
}
}
这个代码名称为HAL_Receive_IT,中断接收函数,这个函数用来表示操作的状态(名称为HAL_StatusTypeDef状态类型)
接收三个参数,分别为:
·huart:用来指向uart句柄的指针,该句柄配置了uart模块配置信息
·pData:指向数据缓冲区的指针,用来存储接受的数据
·size:接受数据的大小,以字节为单位。
1.蓝牙控制led灯显示
通过cubemx初始化接口,这里采用c11作为输出引脚,pb10,pb11也就是uart3作为串口进行发送接收数据,代码如下:
uint_8 Byte;
while(1)
{
HAL_StatusTypedef status=HAL_UART_Receive(&huart, &Byte, 1, 1000)
if(status==HAL_OK){
if(Byte==0x41)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_RESET)
}
else
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN11,GPIO_PIN_RESET)}
}}
uint8_t Byte;
这个代码有问题,目前是传输的问题,能传但是传的数据是什么形式暂时还不太清楚。
下午又整了一下,发现还是传不过来,准备用中断来进行传输了,这里要注意Byte里面存的是数据,而&Byte代表的是地址,而不是数据,它是一个指针,接收的是内容,下面的if语句是判断数据是否为0x41这是一个无符号8位整数,41对应的就是0100 0001,8位。取值范围为0-255,一个字节有8位。