野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16392|回复: 5

关于霸天虎V2的串口收发实验1

[复制链接]
发表于 2021-9-8 22:11:24 | 显示全部楼层 |阅读模式
实验是12_USART实验  1 USART收发
我对着源程序敲,一共需要敲程序的代码文件有四个(根据LED程序移植过来),一个是main.c,一个是bsp_debug_usart.c,一个是bsp_debug_usart.h,  一个是stm32f4xx.it.c
其中main是主程序
bsp是USART配置和相关收发程序
stm324xx_it.c是中断程序
现在问题是,中断程序可以正常运行,可以正常显示发出去的信息
但是
  1. Usart_SendString( DEBUG_USART,"这是一个串口中断接收回显实验\n");
复制代码
这个函数发给调试助手的是一堆乱码。
  1. [21:49:44.265]收←◆炴樉瀹為獙\n杩欐槸涓€涓覆鍙d腑鏂帴鏀跺洖鏄惧疄楠孿n寤舵椂
复制代码
我看网上的debug贴说这是内部的晶振设置有问题,但是我也不太清楚哪里有问题。
源码是没错的,我怕自己敲错没找出来还替换了配套的官方程序(上面讲的四个文件)到我的工程里,再次下载还是不行,但是我用官方的程序又可以正常发送和正常显示。下面是我的源代码
  1. /*bsp_debug_usart.c
  2. * _______________#########_______________________
  3. * ______________############_____________________
  4. * ______________#############____________________
  5. * _____________##__###########___________________
  6. * ____________###__######_#####__________________
  7. * ____________###_#######___####_________________
  8. * ___________###__##########_####________________
  9. * __________####__###########_####_______________
  10. * ________#####___###########__#####_____________
  11. * _______######___###_########___#####___________
  12. * _______#####___###___########___######_________
  13. * ______######___###__###########___######_______
  14. * _____######___####_##############__######______
  15. * ____#######__#####################_#######_____
  16. * ____#######__##############################____
  17. * ___#######__######_#################_#######___
  18. * ___#######__######_######_#########___######___
  19. * ___#######____##__######___######_____######___
  20. * ___#######________######____#####_____#####____
  21. * ____######________#####_____#####_____####_____
  22. * _____#####________####______#####_____###______
  23. * ______#####______;###________###______#________
  24. * ________##_______####________####______________
  25. *
  26. * [url=home.php?mod=space&uid=41770]@brief[/url]        : 函数定义,重定向printf函数到USART端口,中断接收模式
  27. * @Version      : 1.0
  28. * @Autor        : hgospodar
  29. * @Date         : 2021-08-28 16:29:50
  30. * @LastEditors  : hgospodar
  31. * @LastEditTime : 2021-09-08 20:41:42
  32. */
  33. #include "./usart/bsp_debug_usart.h"

  34. static void NVIC_Configuration(void)
  35. {
  36.     NVIC_InitTypeDef NVIC_InitStructure;

  37.     // 嵌套向量中断控制器选择
  38.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

  39.     // 配置USART为中断源
  40.     NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;
  41.     // 抢断优先级为1
  42.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  43.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  44.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  45.     NVIC_Init(&NVIC_InitStructure);
  46. }

  47. void Debug_USART_Config(void)
  48. {
  49.     GPIO_InitTypeDef GPIO_InitStructure;
  50.     USART_InitTypeDef USART_InitStructure;

  51.     RCC_AHB1PeriphClockCmd(DEBUG_USART_RX_GPIO_CLK|DEBUG_USART_TX_GPIO_CLK, ENABLE);

  52.     RCC_APB2PeriphClockCmd(DEBUG_USART_CLK, ENABLE);

  53.     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  54.     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  55.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  56.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  57.     GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_PIN;
  58.     GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);

  59.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  60.     GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_PIN;
  61.     GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);

  62.     GPIO_PinAFConfig(DEBUG_USART_RX_GPIO_PORT, DEBUG_USART_RX_SOURCE, DEBUG_USART_RX_AF);

  63.     GPIO_PinAFConfig(DEBUG_USART_TX_GPIO_PORT, DEBUG_USART_TX_SOURCE, DEBUG_USART_TX_AF);

  64.     USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
  65.     USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  66.     USART_InitStructure.USART_StopBits = USART_StopBits_1;
  67.     USART_InitStructure.USART_Parity = USART_Parity_No;
  68.     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  69.     USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  70.     USART_Init(DEBUG_USART, &USART_InitStructure);

  71.     NVIC_Configuration();

  72.     USART_ITConfig(DEBUG_USART, USART_IT_RXNE, ENABLE);
  73.     USART_Cmd(DEBUG_USART, ENABLE);
  74. }


  75. /**
  76. * @brief    发送一个字符
  77. * @param    {USART_TypeDef} *pUSARTx 发送的USART端口
  78. * @param    {uint8_t} ch   发送的字符
  79. * [url=home.php?mod=space&uid=82536]@return[/url]   {*}
  80. * @author   hgospodar
  81. */
  82. void Usart_SendByte(USART_TypeDef *pUSARTx, uint8_t ch)
  83. {
  84.     USART_SendData(pUSARTx, ch);
  85.     while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
  86. }

  87. /**
  88. * @brief    发送字符串
  89. * @param    {USART_TypeDef} *pUSARTx   发送端口
  90. * @param    {char} *str    发送的字符串地址
  91. * @return   {*}
  92. * @author   hgospodar
  93. */
  94. void Usart_SendString(USART_TypeDef *pUSARTx, char *str)
  95. {
  96.     unsigned int k = 0;
  97.     do
  98.     {
  99.         Usart_SendByte(pUSARTx, *(str + k));
  100.         k++;
  101.     } while (*(str + k)!='\0');

  102.     while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET)
  103.     {
  104.         /* code */
  105.     }
  106. }

  107. /**
  108. * @brief    发送一个16位数
  109. * @param    {USART_TypeDef} *pUSARTx   发送端口
  110. * @param    {uint16_t} ch  发送的16位数
  111. * @return   {*}
  112. * @author   hgospodar
  113. */
  114. void Usart_SendHalfWord(USART_TypeDef *pUSARTx, uint16_t ch)
  115. {
  116.     uint8_t temp_h, temp_l;

  117.     temp_h = (ch&0xff00)>>8;
  118.     temp_l = ch&0xff;

  119.     USART_SendData(pUSARTx, temp_h);
  120.     while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);

  121.     USART_SendData(pUSARTx, temp_l);
  122.     while(USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
  123. }

  124. int fputc(int ch, FILE *f)
  125. {
  126.     while(USART_GetFlagStatus(DEBUG_USART, USART_FLAG_RXNE) == RESET);

  127.     return (int)USART_ReceiveData(DEBUG_USART);
  128. }

  129. int fget(FILE *f)
  130. {
  131.     while(USART_GetFlagStatus(DEBUG_USART, USART_FLAG_RXNE) == RESET);
  132.     return (int)USART_ReceiveData(DEBUG_USART);
  133. }
复制代码
  1. /*bsp_debug_usart.h
  2. * _______________#########_______________________
  3. * ______________############_____________________
  4. * ______________#############____________________
  5. * _____________##__###########___________________
  6. * ____________###__######_#####__________________
  7. * ____________###_#######___####_________________
  8. * ___________###__##########_####________________
  9. * __________####__###########_####_______________
  10. * ________#####___###########__#####_____________
  11. * _______######___###_########___#####___________
  12. * _______#####___###___########___######_________
  13. * ______######___###__###########___######_______
  14. * _____######___####_##############__######______
  15. * ____#######__#####################_#######_____
  16. * ____#######__##############################____
  17. * ___#######__######_#################_#######___
  18. * ___#######__######_######_#########___######___
  19. * ___#######____##__######___######_____######___
  20. * ___#######________######____#####_____#####____
  21. * ____######________#####_____#####_____####_____
  22. * _____#####________####______#####_____###______
  23. * ______#####______;###________###______#________
  24. * ________##_______####________####______________
  25. *
  26. * @brief        : USART1的宏定义,函数声明
  27. * @Version      : 1.0
  28. * @Autor        : hgospodar
  29. * @Date         : 2021-08-28 16:29:24
  30. * @LastEditors  : hgospodar
  31. * @LastEditTime : 2021-08-28 17:21:30
  32. */

  33. #ifndef __DEBUG_USART_H
  34. #define __DEBUG_USART_H

  35. #include "stm32f4xx.h"
  36. #include <stdio.h>

  37. #define DEBUG_USART                 USART1
  38. #define DEBUG_USART_CLK             RCC_APB2Periph_USART1
  39. #define DEBUG_USART_BAUDRATE        115200

  40. #define DEBUG_USART_RX_GPIO_PORT    GPIOA
  41. #define DEBUG_USART_RX_GPIO_CLK     RCC_AHB1Periph_GPIOA
  42. #define DEBUG_USART_RX_PIN          GPIO_Pin_10
  43. #define DEBUG_USART_RX_AF           GPIO_AF_USART1
  44. #define DEBUG_USART_RX_SOURCE       GPIO_PinSource10

  45. #define DEBUG_USART_TX_GPIO_PORT    GPIOA
  46. #define DEBUG_USART_TX_GPIO_CLK     RCC_AHB1Periph_GPIOA
  47. #define DEBUG_USART_TX_PIN          GPIO_Pin_9
  48. #define DEBUG_USART_TX_AF           GPIO_AF_USART1
  49. #define DEBUG_USART_TX_SOURCE       GPIO_PinSource9

  50. #define DEBUG_USART_IRQHandler      USART1_IRQHandler
  51. #define DEBUG_USART_IRQ             USART1_IRQn

  52. void Debug_USART_Config(void);
  53. void Usart_SendByte(USART_TypeDef *pUSARTx, uint8_t ch);
  54. void Usart_SendString(USART_TypeDef *pUSARTx, char *str);

  55. void Usart_SendHalfWord(USART_TypeDef *pUSARTx, uint16_t ch);
  56. #endif // __USART1_H

  57. //
复制代码
  1. /*main.c
  2. * @Description: 循环点亮LED
  3. * @Version: 1.0
  4. * @Autor: hgospodar
  5. * @Date: 2021-08-20 17:15:28
  6. * @LastEditors : hgospodar
  7. * @LastEditTime : 2021-09-08 19:44:59
  8. * @FilePath: \05_新建工程_库函数版\User\main.c
  9. */
  10. /*
  11. * _______________#########_______________________
  12. * ______________############_____________________
  13. * ______________#############____________________
  14. * _____________##__###########___________________
  15. * ____________###__######_#####__________________
  16. * ____________###_#######___####_________________
  17. * ___________###__##########_####________________
  18. * __________####__###########_####_______________
  19. * ________#####___###########__#####_____________
  20. * _______######___###_########___#####___________
  21. * _______#####___###___########___######_________
  22. * ______######___###__###########___######_______
  23. * _____######___####_##############__######______
  24. * ____#######__#####################_#######_____
  25. * ____#######__##############################____
  26. * ___#######__######_#################_#######___
  27. * ___#######__######_######_#########___######___
  28. * ___#######____##__######___######_____######___
  29. * ___#######________######____#####_____#####____
  30. * ____######________#####_____#####_____####_____
  31. * _____#####________####______#####_____###______
  32. * ______#####______;###________###______#________
  33. * ________##_______####________####______________
  34. */

  35. #include "stm32f4xx.h"
  36. #include "./usart/bsp_debug_usart.h"

  37. /**
  38. * @description: 延时函数
  39. * @param {__IO u32} nCount 定时计数(相对大小)
  40. * @return {*}
  41. * @author: hgospodar
  42. */
  43. void Delay(__IO u32 nCount);


  44. /**
  45. * @description: 主函数
  46. * @param {*}
  47. * @return {int} 返回值
  48. * @author: hgospodar
  49. */
  50. int main(void)
  51. {
  52. Debug_USART_Config();

  53. Usart_SendString(DEBUG_USART, "这是一个串口中断接收回显实验\n");
  54. printf("这是一个串口中断接收回显实验\n");
  55. while(1)
  56. {
  57. Usart_SendString(DEBUG_USART, "延时\n");
  58. Delay(10000000);
  59. }

  60. }

  61. void Delay(__IO uint32_t nCount)
  62. {
  63. for (;nCount != 0; nCount--);
  64. }
复制代码


回复

使用道具 举报

发表于 2021-9-9 08:46:08 | 显示全部楼层
用示波器或者逻辑分析仪抓一下串口的波形就知道是不是波特率不对了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-9 17:06:49 | 显示全部楼层
已经解决,是字符编码的问题,需要在设置keil编码为ANSI形式。或者打开main.c文件,另存为ANSI格式
回复 支持 反对

使用道具 举报

发表于 2021-9-11 09:20:33 | 显示全部楼层
其实不用另存为也行的,在keil5这个界面可以切换字符编码。

野火论坛202109110920061706..png

野火论坛202109110920312943..png
回复 支持 反对

使用道具 举报

发表于 2021-9-15 15:14:05 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2021-9-23 20:07:24 | 显示全部楼层
瞎眼灯 发表于 2021-9-11 09:20
其实不用另存为也行的,在keil5这个界面可以切换字符编码。

谢谢,get
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 13:02 , Processed in 0.083513 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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