OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2858|回复: 2

STM32F4 HAL库开发串口相关问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2018-5-11
在线时间
2 小时
发表于 2018-12-10 20:22:33 | 显示全部楼层 |阅读模式
11金钱
    我用的板子是STM32F427IIH6的主控芯片。我使用的是HAL库开发。串口输出接收函数如下:
    HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
    HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
函数的第一位是选择我的串口,第二位是我的串口发送的数据的大小?第三位是缓存区的长度?第四位是超时设置。我想要了解超时设置起到什么作用,控制什么的?还有第二位,第三位我的理解有问题吗?能不能详细解释一下?
还有就是我定义了一个re【】来存放我接受的数据,之后延时10ms输出re【】,可是每次只能返回我发送的奇数位比如我发送123456,返回给我的是135,很不解。-------------------------------------------------------------------------------------------------------------------------------------------
现在我急切想要了解的问题除了上面的,还有,我怎么控制我的缓存区的大小?我上面的理解貌似不对?好像我的缓存区大小一直都是16位。
希望有大神能解决我的问题,最好能给我hal库的接口函数。本人初学,好多东西还是不太了解

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2018-5-11
在线时间
2 小时
 楼主| 发表于 2018-12-10 20:23:19 | 显示全部楼层
int main(void)
{

       
       

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_CAN1_Init();
  MX_CAN2_Init();
  MX_SPI5_Init();
  MX_TIM2_Init();
  MX_TIM4_Init();
  MX_TIM5_Init();
  MX_TIM6_Init();
  MX_TIM8_Init();
  MX_TIM12_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
  MX_USART3_UART_Init();
  MX_USART6_UART_Init();
  MX_USB_DEVICE_Init();
  MX_TIM3_Init();

  /* USER CODE BEGIN 2 */
//  MPU6500_Init();
  
  HAL_TIM_Base_Start_IT(&htim6);
  
  HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
  
//  CanFilter_Init(&hcan1);
//  CanFilter_Init(&hcan2);
//  HAL_CAN_Receive_IT(&hcan1, CAN_FIFO0);
//  HAL_CAN_Receive_IT(&hcan2, CAN_FIFO0);
  
//  HAL_UART_Receive_IT(&huart3, uart3_rx_buff, 1);
//  HAL_UART_Receive_IT(&huart6, uart6_rx_buff, 1);
  
  if(MPU_id != 0)sTestResult.imuTest = 0x01;
  /* USER CODE END 2 */
        unsigned char Re[16];
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
//  uint8_t DaTe[]="UartTest";
  while (1)
  {
  /* USER CODE END WHILE */
//     char8_t DaTe[]="UartTest";

  /* USER CODE BEGIN 3 */
//    IMU_Get_Data();
//        HAL_UART_Transmit(&huart6, DaTe, 8, 0xffff);               
        HAL_UART_Receive(&huart6, Re, 16, 0x8fff);
        HAL_Delay(10);
        HAL_UART_Transmit(&huart6, Re, 16,0x8fff);
    HAL_Delay(10);
//    HAL_UART_RxCpltCallback(&huart2);



        }
  /* USER CODE END 3 */

}

补充一下我的main函数
回复

使用道具 举报

2

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
349
金钱
349
注册时间
2017-3-20
在线时间
86 小时
发表于 2018-12-10 21:55:01 | 显示全部楼层
第一个参数:选择哪一个串口
第二个参数:要发送或接收的数据的地址
第三个参数:要发送或接收的数据长度,也就是有多少个字节
第四个就不清楚了,我看别人写0x10我也写这个数。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 04:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表