【STM32】串口发送、接收程序配置过程(HAL库)

串口发送、接收程序配置过程(HAL库)

串口发送程序配置过程(HAL库):

(1) 初始化串口相关参数,使能串口:HAL_UART_Init ( );

void uart_init(u32 bound)           //bound:波特率

{  

    //UART 初始化设置

    UART1_Handler.Instance=USART1;                    //USART1

    UART1_Handler.Init.BaudRate=bound;                //波特率

    UART1_Handler.Init.WordLength=UART_WORDLENGTH_8B;  //字长为8位数据格式

    UART1_Handler.Init.StopBits=UART_STOPBITS_1;      //一个停止位

    UART1_Handler.Init.Parity=UART_PARITY_NONE;      //无奇偶校验位

    UART1_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;   //无硬件流控

    UART1_Handler.Init.Mode=UART_MODE_TX_RX;          //收发模式

    HAL_UART_Init(&UART1_Handler);  //HAL_UART_Init()会使能UART1

}

(2) 串口相关IO口配置,复用配置:

在HAL_UART_MspInit中调用HAL_GPIO_Init ( );

void HAL_UART_MspInit(UART_HandleTypeDef *huart)

{

    //GPIO端口设置

   GPIO_InitTypeDef  GPIO_Initure;

   if(huart->Instance==USART1)   //如果是串口1,进行串口1 MSP初始化

   {

       __HAL_RCC_GPIOA_CLK_ENABLE();        //使能GPIOA时钟

       __HAL_RCC_USART1_CLK_ENABLE();   //使能USART1时钟

       GPIO_Initure.Pin=GPIO_PIN_9;                //PA9

       GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出

       GPIO_Initure.Pull=GPIO_PULLUP;         //上拉

       GPIO_Initure.Speed=GPIO_SPEED_FAST;      //高速

       GPIO_Initure.Alternate=GPIO_AF7_USART1;     //复用为USART1

       HAL_GPIO_Init(GPIOA,&GPIO_Initure);        //初始化PA9

       GPIO_Initure.Pin=GPIO_PIN_10;             //PA10

       HAL_GPIO_Init(GPIOA,&GPIO_Initure);       //初始化PA10

}

(3) 发送数据,并等待数据发送完成:

HAL_UART_Transmit ( );函数

HAL_UART_Transmit(&usart 1 handler,buff,sizeof(buff),1000);

串口接收中断程序配置过程(HAL库):

(1) 初始化串口相关参数,使能串口:HAL_UART_Init ( );

(2) 串口相关IO口配置,复用配置:

在HAL_UART_MspInit中调用HAL_GPIO_Init函数。

(3) 串口接收中断优先级配置和使能:

HAL_NVIC_EnablelRQ();

HAL_NVIC_SetPriority();

void HAL_UART_MspInit(UART_HandleTypeDef *huart)

{

#if  EN_USART1_RX

   HAL_NVIC_EnableIRQ(USART1_IRQn); //使能USART1中断通道

   HAL_NVIC_SetPriority(USART1_IRQn,3,3); //抢占优先级3,子优先级3

#endif

   }

(4) 使能串口接收中断:HAL_UART_Receive_IT();

(5) 编写中断服务函数:USARTX_IRQ Handler();

(6) 接收完成回调中断函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef*huart)

{

u8 rec ;

if(huart->Inst ance==USART1)//如果是串口1

rec= *((huart->pRxBuffPtr)-1);

//rec=rdata[0];

HAL_UART_Transmit(&usart 1_handler,&rec,1,1000):

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值