野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 811|回复: 0

串口通讯,为什么我的发不了两个字节,只能发一个字节

[复制链接]
发表于 2023-6-30 16:05:46 | 显示全部楼层 |阅读模式
  1. /**
  2.   ******************************************************************************
  3.   * [url=home.php?mod=space&uid=90986]@file[/url]    main.c
  4.   * @author  fire
  5.   * @version V1.0
  6.   * @date    2013-xx-xx
  7.   * [url=home.php?mod=space&uid=41770]@brief[/url]   测试led
  8.   ******************************************************************************
  9.   * @attention
  10.   *
  11.   * 实验平台:野火 F103-指南者 STM32 开发板
  12.   * 论坛    :http://www.firebbs.cn
  13.   * 淘宝    :https://fire-stm32.taobao.com
  14.   *
  15.   ******************************************************************************
  16.   */
  17.        
  18. #include "stm32f10x.h"
  19. #include "bsp_led.h"
  20. #include "bsp_usart.h"


  21. /**
  22.   * @brief  主函数
  23.   * @param  无  
  24.   * @retval 无
  25.   */
  26. int main(void)
  27. {       
  28.         USART_Config();         

  29.         Usart_SendByte(DEBUG_USARTx,'S');
  30.         Usart_SendHalfWord(DEBUG_USARTx,0xff56);
  31.         while (1)
  32.         {
  33.                
  34.         }
  35. }
复制代码
  1. #include "bsp_usart.h"

  2. static void NVIC_Configuration(void)
  3. {
  4.   NVIC_InitTypeDef NVIC_InitStructure;
  5.   
  6.   /* 嵌套向量中断控制器组选择 */
  7.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  8.   
  9.   /* 配置USART为中断源 */
  10.   NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;
  11.   /* 抢断优先级*/
  12.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  13.   /* 子优先级 */
  14.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  15.   /* 使能中断 */
  16.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  17.   /* 初始化配置NVIC */
  18.   NVIC_Init(&NVIC_InitStructure);
  19. }


  20. void USART_Config(void)
  21. {
  22.         GPIO_InitTypeDef GPIO_InitStructure;
  23.         USART_InitTypeDef USART_InitStructure;

  24.         // 打开串口GPIO的时钟
  25.         DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
  26.        
  27.         // 打开串口外设的时钟
  28.         DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);

  29.         // 将USART Tx的GPIO配置为推挽复用模式
  30.         GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
  31.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  32.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  33.         GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);

  34.   // 将USART Rx的GPIO配置为浮空输入模式
  35.         GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
  36.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  37.         GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
  38.        
  39.         // 配置串口的工作参数
  40.         // 配置波特率
  41.         USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
  42.         // 配置 针数据字长
  43.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  44.         // 配置停止位
  45.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  46.         // 配置校验位
  47.         USART_InitStructure.USART_Parity = USART_Parity_No ;
  48.         // 配置硬件流控制
  49.         USART_InitStructure.USART_HardwareFlowControl =
  50.         USART_HardwareFlowControl_None;
  51.         // 配置工作模式,收发一起
  52.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  53.         // 完成串口的初始化配置
  54.         USART_Init(DEBUG_USARTx, &USART_InitStructure);
  55.        
  56.         // 串口中断优先级配置
  57.         NVIC_Configuration();
  58.        
  59.         // 使能串口接收中断
  60.         USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);       
  61.        
  62.         // 使能串口
  63.         USART_Cmd(DEBUG_USARTx, ENABLE);            
  64. }

  65. /*发送一个字节*/
  66. void Usart_SendByte(USART_TypeDef* pUSARTx,uint8_t data)
  67. {
  68.   USART_SendData(pUSARTx, data);
  69.         while( USART_GetFlagStatus(pUSARTx, USART_IT_TXE)==RESET );
  70. }

  71. /*发送两个字节的数据*/
  72. void Usart_SendHalfWord(USART_TypeDef* pUSARTx,uint16_t data)
  73. {
  74.         uint8_t temp_h,temp_l;
  75.        
  76.         temp_h=(data&0xff00) >> 8 ;
  77.         temp_l=data&0xff;
  78.        
  79.         /* 发送高八位 */
  80.         USART_SendData(pUSARTx,temp_h);       
  81.         while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
  82.        
  83.         /* 发送低八位 */
  84.         USART_SendData(pUSARTx,temp_l);       
  85.         while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
  86. }
复制代码
  1. #ifndef _BSP_USART_H
  2. #define _BSP_USART_H

  3. #include "stm32f10x.h"

  4.        
  5. // 串口1-USART1
  6. #define  DEBUG_USARTx                   USART1
  7. #define  DEBUG_USART_CLK                RCC_APB2Periph_USART1
  8. #define  DEBUG_USART_APBxClkCmd         RCC_APB2PeriphClockCmd
  9. #define  DEBUG_USART_BAUDRATE           115200

  10. // USART GPIO 引脚宏定义
  11. #define  DEBUG_USART_GPIO_CLK           (RCC_APB2Periph_GPIOA)
  12. #define  DEBUG_USART_GPIO_APBxClkCmd    RCC_APB2PeriphClockCmd
  13.    
  14. #define  DEBUG_USART_TX_GPIO_PORT       GPIOA   
  15. #define  DEBUG_USART_TX_GPIO_PIN        GPIO_Pin_9
  16. #define  DEBUG_USART_RX_GPIO_PORT       GPIOA
  17. #define  DEBUG_USART_RX_GPIO_PIN        GPIO_Pin_10

  18. #define  DEBUG_USART_IRQ                USART1_IRQn
  19. #define  DEBUG_USART_IRQHandler         USART1_IRQHandler

  20. void USART_Config(void);
  21. void Usart_SendByte(USART_TypeDef* pUSARTx,uint8_t data);
  22. void Usart_SendHalfWord(USART_TypeDef* pUSARTx,uint16_t data);

  23. #endif /*_BSP_USART_H*/
复制代码


我是照着火哥的视频上的代码敲的,但是他的能发送两个字节,我的无论如何都只能发一个字节,不知道为什么,希望哪个大神来指导一下
回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-4 10:50 , Processed in 0.033368 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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