STM32 串口发送数据(发送一个字节,以及数组)

本文介绍STM32通过串口发送数据的方法,包括单个字节、字符串及数组的发送过程。详细展示了配置串口参数、初始化GPIO以及使用库函数发送数据的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32 串口发送数据(发送一个字节,以及数组)

 
  1. #include"usart1.h"
  2. //#include   //加载MDK 自带的 C 函数  D:\Keil\C51\INC

  3. //串口1 配置
  4. void USART1_Config(void)
  5. {

  6.         GPIO_InitTypeDef GPIO_InitStructure; //定义结构体 
  7.         // 结构体内容在stm32f10x_gpio.h  101行        //  见库函数 P125页  

  8.         USART_InitTypeDef USART_InitStructure;         //定义结构体 
  9.         // 结构体内容在stm32f10x_usart.h  76行        //   库函数的348页

  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
  11.         //打开时钟

  12.         //初始化GPIO 见库函数 P125页 
  13.            
  14.        
  15.          
  16.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;           //要设置的PIN
  17. //        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出

  18.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
  19.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;        //输出速度
  20.         GPIO_Init(GPIOA,&GPIO_InitStructure);        //配置 IO

  21.        
  22.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  //RX 接收引脚
  23.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        //浮空输入模式
  24.         GPIO_Init(GPIOA, &GPIO_InitStructure);          //配置IO口


  25.         // 结构体内容在stm32f10x_usart.h  76行        //   库函数的348页
  26.        
  27.         USART_InitStructure.USART_BaudRate=9600;   //设定波特率 
  28.         USART_InitStructure.USART_WordLength=USART_WordLength_8b;  //8位数据
  29.         USART_InitStructure.USART_StopBits=USART_StopBits_1;   //停止位1位
  30.         USART_InitStructure.USART_Parity=USART_Parity_No;  //无校验位
  31.         USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件控制 CTS RTS 
  32.         USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;  //发送接收 使能
  33.         USART_Init(USART1,&USART_InitStructure); //配置USART1
  34.         
  35.         USART_Cmd(USART1,ENABLE); //使能 串口1        
  36. }

  37. void USART1_Send_Byte(unsigned char byte)   //串口发送一个字节
  38. {
  39.         USART_SendData(USART1, byte);        //通过库函数  发送数据
  40.         while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);  
  41.         //等待发送完成。   检测 USART_FLAG_TC 是否置1;    //见库函数 P359 介绍
  42.         
  43. }


  44. //发送字符串 函数   应用指针 方法
  45. void UART1_Send_Str(unsigned char *s)//发送字符串 函数   应用指针 方法
  46. {
  47.         unsigned char i=0;  //定义一个局部变量  用来 发送字符串 ++运算

  48.         while(s[i]!='\0')  // 每个字符串结尾 都是以  \0 结尾的
  49.         {
  50.                 USART_SendData(USART1,s[i]);        //通过库函数  发送数据
  51.                 while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);  
  52.                 //等待发送完成。   检测 USART_FLAG_TC 是否置1;    //见库函数 P359 介绍

  53.                 i++;                 //i++一次
  54.         }

  55. }


  56. void UART1_Send_Array(unsigned char send_array[],unsigned char num) //两个参数 一是数组(的数据) 二是数组长度1-255 
  57. {
  58.         //串口发送
  59.         unsigned char i=0;  //定义一个局部变量  用来 发送字符串 ++运算


  60.         while(i
  61.         {
  62.                 
  63.                 USART_SendData(USART1,send_array[i]);        //通过库函数  发送数据
  64.                 while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);  
  65.                 //等待发送完成。   检测 USART_FLAG_TC 是否置1;    //见库函数 P359 介绍

  66.                 i++;  //值 加一         
  67.         }
  68.         
  69. }
### STM32 使用 HAL 库通过串口发送字节数组STM32 中,使用 HAL (Hardware Abstraction Layer) 库可以通过 USART 或 UART 外设实现串口通信功能。以下是关于如何通过串口发送字节数组的具体方法。 #### 配置步骤概述 为了成功完成串口初始化并发送数据,需先配置好硬件资源以及 HAL 函数调用环境。具体包括启用时钟、GPIO 初始化、USART 参数设置等操作[^1]。 #### 发送字节数组的核心函数 HAL 提供了一个方便的接口 `HAL_UART_Transmit` 来处理数据传输过程中的细节问题。下面是一个完整的示例代码展示如何利用该函数向指定端口写入一组字节: ```c #include "stm32f4xx_hal.h" UART_HandleTypeDef huart1; void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 9600; // 设置波特率为9600bps huart1.Init.WordLength = UART_WORDLENGTH_8B;// 字符长度为8位 huart1.Init.StopBits = UART_STOPBITS_1; // 停止位数为1 huart1.Init.Parity = UART_PARITY_NONE; // 不使用校验 huart1.Init.Mode = UART_MODE_TX_RX; // 启动收发模式 huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;// 关闭流控制 if (HAL_UART_Init(&huart1) != HAL_OK){ Error_Handler(); // 如果初始化失败则进入错误处理器 } } // 定义要发送的数据数组 uint8_t data_to_send[] = {0x5A, 0xA5, 0xFF, 0x0F}; int main(void) { HAL_Init(); MX_USART1_UART_Init(); while (1) { // 调用 HAL_UART_Transmit 将数据发送出去 HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, sizeof(data_to_send), HAL_MAX_DELAY); if(status != HAL_OK){ // 错误处理逻辑可以在这里扩展 } HAL_Delay(1000); // 每隔一秒重复执行一次循环 } } ``` 上述代码片段展示了如何定义一个简单的字节数组并通过已初始化好的 USART 设备将其内容逐帧发出的过程。注意这里使用的延迟函数 `HAL_Delay()` 是以毫秒计时单位运行的阻塞型延时工具,在实际项目里可能需要考虑更高效的非阻塞性机制替代它。 另外需要注意的是,在某些情况下如果希望提高效率或者减少 CPU 占用率,则可以选择中断方式或是 DMA 技术来进行大批量连续性的资料传送作业[^3]。 #### 注意事项 当涉及到实时性强的任务比如温度采集反馈控制系统时,应特别小心避免因额外增加不必要的指令而破坏原有精确的时间窗口安排。因此建议仅保留必要的计算部分,并尽可能缩短每次访问外部设备所需耗费的实际周期数目。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值