串口 CubeMX

Mode: Disable  关闭
               Asynchronous  异步
               sysnchronous 同步模式
               Single  Wire    单线
               Multiprocessor 多处理器
               IrDA   红外辐射
                Lin  总线
                Smart  Card  智能卡
Hardware  Flow  Control(232)  硬件流控(232)
Basic Parameters  基本参数
                Baud Rate      波特率        115200
                Word  Length  字长                    8
                Parity               奇偶性               无
                Stop  Bits         停止位                1
Advanced  Parameters   高级参数
                 Data  Direction    数据方向   (收发,收,发)
                Over  Sampling    过采样          16

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

节拍:先在主main内打开接收》接收完成会执行回调函数》此时将不再继续接收,如果想继续接收,要在回调函数内再打开串口接收。 

开启发送:

uint8_t rec1[3]={0x08,0x0d,0x0a};

HAL_UART_Transmit_IT(&huart1,rec1,3);  // it是中断,中断发送 

发送:#include "string.h"      
           uint8_t txbuf[50];
           memcpy(txbuf,"这是一个串口中断接收回显实验\n",50);

           HAL_UART_Transmit(&husartx,txbuf,strlen((char *)txbuf),1000);

开启接收中断:

HAL_UART_Receive_IT(&huart1,rec1,sizeof(huart1.RxXferSize));

使用回调:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance==USART1)
    {
      rec=*((huart->pRxBuffPtr)-1);
      HAL_UART_Transmit(&huart1,&rec,1,1000);
    }
}

补充:  开启接收中断,对象有属性:接收的总字节设置。默认是0,也就是说,接收1个字节后就代表接收完成,会调用接收回调函数:HAL_UART_RxCpltCallback

串口对象:属性有,接收总字节,接收包指针,发送总字节,发送包指针。。

01 typedef struct {
02 USART_TypeDef *Instance; //UART 寄存器基地址
03 UART_InitTypeDef Init; //UART 通信参数
04 uint8_t *pTxBuffPtr; //指向 UART 发送缓冲区
05 uint16_t TxXferSize; //UART 发送数据大小
06 __IO uint16_t TxXferCount; //UART 发送计数器
07 uint8_t *pRxBuffPtr; //指向 UART 接收缓冲区
08 uint16_t RxXferSize; //UART 接收数据大小
09 __IO uint16_t RxXferCount; //UART 接收计数器
10 DMA_HandleTypeDef *hdmatx; //UART 发送参数设置(DMA 模式)
11 DMA_HandleTypeDef *hdmarx; //UART 接收参数设置(DMA 模式)
12 HAL_LockTypeDef Lock; //锁定对象
13 __IO HAL_UART_StateTypeDef gState; //UART 全局状态信息并关联发送操作
14 __IO HAL_UART_StateTypeDef RxState; //UART 接收操作状态信息
15 __IO uint32_t ErrorCode; //错误代码
16 } UART_HandleTypeDef;
17

01 typedef struct {   // 串口类型
02 USART_TypeDef *Instance; //UART 寄存器基地址  (寄存器的地址结构)
03 UART_InitTypeDef Init; //UART 通信参数                  (串口初始化的参数)

//发送
04 uint8_t *pTxBuffPtr; //指向 UART 发送缓冲区
05 uint16_t TxXferSize; //UART 发送数据大小
06 __IO uint16_t TxXferCount; //UART 发送计数器

//接收

07 uint8_t *pRxBuffPtr; //指向 UART 接收缓冲区
08 uint16_t RxXferSize; //UART 接收数据大小
09 __IO uint16_t RxXferCount; //UART 接收计数器


10 DMA_HandleTypeDef *hdmatx; //UART 发送参数设置(DMA 模式)
11 DMA_HandleTypeDef *hdmarx; //UART 接收参数设置(DMA 模式)
12 HAL_LockTypeDef Lock; //锁定对象
13 __IO HAL_UART_StateTypeDef gState; //UART 全局状态信息并关联发送操作
14 __IO HAL_UART_StateTypeDef RxState; //UART 接收操作状态信息
15 __IO uint32_t ErrorCode; //错误代码
16 } UART_HandleTypeDef;
17
 

01 int main(void)
02 {
03 uint8_t txbuf[50];
04 /* 复位所有外设,初始化 Flash 接口和系统滴答定时器 */
05 HAL_Init();
06 /* 配置系统时钟 */
07 SystemClock_Config();
08
09 /* 初始化串口并配置串口中断优先级 */
10 MX_USARTx_Init();
11
12 memcpy(txbuf,"这是一个串口中断接收回显实验\n",100);
13 HAL_UART_Transmit(&husartx,txbuf,strlen((char *)txbuf),1000);
14
15 memcpy(txbuf,"输入数据并以回车键结束\n",100);
16 HAL_UART_Transmit(&husartx,txbuf,strlen((char *)txbuf),1000);
17
18 /* 使能接收,进入中断回调函数 */
19 HAL_UART_Receive_IT(&husartx,&aRxBuffer,1);
20
21 /* 无限循环 */
22 while (1) {
23
24           }
25 }

 /* 使能接收,进入中断回调函数 */
 HAL_UART_Receive_IT(&husartx,&aRxBuffer,1);

//回调函数 

01 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
02 {
03 HAL_UART_Transmit(&husartx,&aRxBuffer,1,0);
04 HAL_UART_Receive_IT(&husartx,&aRxBuffer,1);
05 }
PB6串口1串口发送数据 TX 引脚
PB7串口1串口接收数据 RX 引脚

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值