找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 883|回复: 2
打印 上一主题 下一主题
收起左侧

stm32单片机串口发送16进制数的方法分享含程序

[复制链接]
跳转到指定楼层
楼主
ID:285686 发表于 2025-1-18 08:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32单片机串口发送16进制数的方法分享含程序;按下按钮 key0后程序输出16进制数组。

  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include <stdio.h>


  7. void UART_Send_Hex(uint8_t hex)
  8.                         {
  9.                         int i;
  10.                         char buffer[2];
  11.                         sprintf(buffer,"%02X",hex);
  12.                                 for( i=0;i<2;i++)
  13.                                 {i++;
  14.                 USART_SendData(USART1,buffer[i]);
  15.                 while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==0);
  16.                                 }
  17.                                 
  18.                         }

  19. int main(void)
  20. {        
  21.          
  22.          uint8_t DATA[4]={0xFE,0x00,0x01,0XFF};
  23.          uint8_t hex_data=0XFE;
  24.          uint8_t hex_data1=0x00;
  25.          uint8_t hex_data2=0x01;
  26.          uint8_t hex_data3=0xFF;
  27.          
  28.          
  29.          u8 t=0;
  30.          u16 times=0;
  31.         LED_Init();
  32.         
  33.         delay_init();                     //延时函数初始化         
  34.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  35.         uart_init(9600);         //串口初始化为115200
  36.          //LED_Init();                             //LED端口初始化
  37.           KEY_Init();          //初始化与按键连接的硬件接口

  38.         LED0=0;
  39.         
  40.         
  41.          while(1)
  42.         {
  43.                
  44.                
  45.                 LED0=0;
  46.                
  47.                 delay_us(1000);
  48.                 LED0=0;
  49.                 //KEY_Scan(0);
  50.         //        UART_Send_Hex(hex_data);               
  51.                
  52.                 t=KEY_Scan(0);                //得到键值
  53.                 switch(t)
  54.                         
  55.                 {               
  56. case KEY0_PRES:
  57.         

  58. {
  59.          int i;
  60.          delay_us(1000);
  61.          for(i=0;i<4;i++)
  62.          {
  63.           USART1->DR=DATA[i];
  64.    while((USART1->SR&0X40)==0);
  65.                
  66.                 LED0=1;
  67.         }
  68. }

  69.                
  70. }

  71. }
复制代码


原理图: 无
仿真: 无
代码: 代码.7z (183.89 KB, 下载次数: 0)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:285686 发表于 2025-1-18 08:18 | 只看该作者
串口波特率9600,8位,无校验。程序里面可根据自己需要修改。按钮使用的是PA8。
回复

使用道具 举报

无效楼层,该帖已经被删除
地板
ID:285686 发表于 2025-1-24 18:41 | 只看该作者
发现一个问题;发送数组的时候第一个数据会丢失;在发送数据前需要先检查发送是否为空;case KEY0_PRES:
        

{
         int i;
         delay_us(1000);
         for(i=0;i<4;i++)
         {
          USART1->DR=DATA[i];
   while((USART1->SR&0X40)==0);
               
                LED0=1;
        }
}
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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