stm32实战

作者 : admin 本文共972个字,预计阅读时间需要3分钟 发布时间: 2024-06-17 共1人阅读
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位。

本站无任何商业行为
个人在线分享-虚灵IT资料分享 » stm32实战
E-->