OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4042|回复: 13

STM32F103精英板 跟着原子例程 编写了一个USART2的简单实例 但是串口调试助手接收不到任何返回的数据

[复制链接]

2

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2020-2-6
在线时间
37 小时
发表于 2020-7-31 16:58:13 | 显示全部楼层 |阅读模式
3金钱
本帖最后由 CAUC190146233 于 2020-7-31 17:09 编辑

跟着那个视频教程写的,只不过用的是USART2不是USART1。
编译没有问题,硬件没有损坏。
  1. #include "USART.h"
  2. #include "delay.h"
  3. #include "stm32f10x.h"

  4. void MY_USART2_Init(void)
  5. {
  6.         GPIO_InitTypeDef GPIO_InitStructure;
  7.         USART_InitTypeDef USART_InitStructure;
  8.         NVIC_InitTypeDef NVIC_InitStructure;
  9.         
  10.         RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2,ENABLE);
  11.         RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA,ENABLE);
  12.         
  13.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
  14.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
  15.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  16.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  17.         
  18.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  19.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
  20.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  21.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  22.         
  23.         NVIC_InitStructure.NVIC_IRQChannel=USART2_IRQn;
  24.         NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  25.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;
  26.         NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01;
  27.         NVIC_Init(&NVIC_InitStructure);        
  28. /*************************************************************
  29. 以上是对串口中断的设置
  30. *************************************************************/

  31.         USART_InitStructure.USART_BaudRate=115200;
  32.         USART_InitStructure.USART_WordLength=USART_WordLength_8b;
  33.         USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件数据流控制
  34.         USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//这里写在一起了
  35.         USART_InitStructure.USART_Parity=USART_Parity_No;
  36.         USART_InitStructure.USART_StopBits=USART_StopBits_1;
  37.         USART_Init(USART2,&USART_InitStructure);
  38.         
  39.         USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
  40.         
  41.         USART_Cmd(USART2,ENABLE);
  42. /*************************************************************
  43. 以上是对串口的设置
  44. *************************************************************/        
  45. }

  46. void USART2_IRQHandler(void)
  47. {
  48.         u8 res;
  49.         if(USART_GetFlagStatus(USART2,USART_IT_RXNE))
  50.         {
  51.                 res=USART_ReceiveData(USART2);
  52.                 USART_SendData(USART2,res);
  53.         }
  54. }
  55. /*************************************************************
  56. 以上是对串口中断服务函数
  57. *************************************************************/
复制代码
  1. #ifndef __USART_H
  2. #define __USART_H

  3. void MY_USART2_Init(void);

  4. #endif
复制代码
串口调试助手没有返回任何数据。
求解
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2020-7-31 16:58:14 | 显示全部楼层
CAUC190146233 发表于 2020-7-31 17:26
是的,但是改过来之后还是不行,没有数据返回
  1. #include "usart2.h"          

  2. //USART2_TX   GPIOA.2
  3. //USART2_RX          GPIOA.3

  4. u8  USART2_TX_BUF[USART2_MAX_TX_LEN];                 //发送缓冲,最大USART2_MAX_TX_LEN-1字节
  5. u8  USART2_RX_BUF[USART2_MAX_RX_LEN];                 //接收缓冲,最大USART2_MAX_RX_LEN-1字节
  6. volatile u16 USART2_RX_STA=0;               //bit15:接收完成标志   bit14~0:接收到的有效字节数目

  7. void USART2_Init(u32 bound)
  8. {
  9.         GPIO_InitTypeDef GPIO_InitStructure;
  10.         USART_InitTypeDef USART_InitStructure;
  11.         NVIC_InitTypeDef NVIC_InitStructure;

  12.         //时钟设置
  13.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
  14.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);               

  15.         //USARTx_TX
  16.         GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_2;
  17.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  18.         GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
  19.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  20.         //USARTx_RX
  21.         GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_3;
  22.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
  23.         GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
  24.         GPIO_Init(GPIOA, &GPIO_InitStructure);  
  25.        
  26.         #if RS485_USART2==1
  27.         My_GPIO_Init(RS485_USART2_TX_EN_GPIOx,RS485_USART2_TX_EN_Pin,GPIO_TW_OUT,GPIO_P_DOWN,GPIO_100MHz);//推挽输出 下拉 100m
  28.         RS485_USART2_TX_EN=0;
  29.         #endif
  30.        
  31.         //NVIC 配置
  32.         NVIC_InitStructure.NVIC_IRQChannel                   = USART2_IRQn;
  33.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
  34.         NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;
  35.         NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;                 
  36.         NVIC_Init(&NVIC_InitStructure);         
  37.        
  38.          //USARTx初始化
  39.         USART_InitStructure.USART_BaudRate            = bound;
  40.         USART_InitStructure.USART_WordLength          = USART_WordLength_8b;
  41.         USART_InitStructure.USART_StopBits            = USART_StopBits_1;
  42.         USART_InitStructure.USART_Parity              = USART_Parity_No;
  43.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  44.         USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;

  45.         //使能配置
  46.         USART_Init(USART2, &USART_InitStructure);     //初始化串口
  47.         USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接受中断
  48.         USART_ITConfig(USART2, USART_IT_IDLE, ENABLE);//开启串口空闲IDEL中断
  49.         USART_Cmd(USART2, ENABLE);                    //使能串口
  50.         USART2_printf("USART2 OK...\r\n");
  51. }

  52. void USART2_printf (char *fmt, ...)
  53. {
  54.         u16 i = 0;
  55.         va_list arg_ptr;
  56.         va_start(arg_ptr, fmt);
  57.         vsnprintf((char *)USART2_TX_BUF, USART2_MAX_TX_LEN+1, fmt, arg_ptr);
  58.         va_end(arg_ptr);
  59.        
  60.         #if RS485_USART2==1
  61.         RS485_USART2_TX_EN=1;
  62.         #endif
  63.        
  64.         while ((i < USART2_MAX_TX_LEN) && USART2_TX_BUF[i])
  65.         {
  66.                 while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
  67.                 USART_SendData(USART2, (u8) USART2_TX_BUF[i++]);
  68.                 while (USART_GetFlagStatus(USART2, USART_FLAG_TC)  == RESET);
  69.         }
  70.        
  71.         #if RS485_USART2==1
  72.         RS485_USART2_TX_EN=0;
  73.         #endif
  74. }
  75.   
  76. void USART2_Send_Array (u8 *array,u16 num)
  77. {
  78.         u16 i=0;
  79.        
  80.         #if RS485_USART2==1
  81.         RS485_USART2_TX_EN=1;
  82.         #endif
  83.        
  84.         while (i < num)
  85.         {
  86.                 while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
  87.                 USART_SendData(USART2, (u8) array[i++]);
  88.                 while (USART_GetFlagStatus(USART2, USART_FLAG_TC)  == RESET);
  89.         }
  90.        
  91.         #if RS485_USART2==1
  92.         RS485_USART2_TX_EN=0;
  93.         #endif
  94. }

  95. void USART2_IRQHandler(void)
  96. {
  97.         if(USART_GetITStatus(USART2, USART_IT_IDLE) != RESET)               // 空闲中断
  98.         {
  99.                 USART_ReceiveData(USART2);                                      //清除空闲中断标志
  100.                 USART2_RX_BUF[USART2_RX_STA&0X7FFF]='\0';                                //添加\0,防止字符串处理函数遇不见\0一直不结束
  101.                 USART2_RX_STA|=0x8000;                                                //标记接收完成了
  102.                 //添加处理函数,最好主函数查询处理

  103.         }       
  104.         if(USART_GetFlagStatus(USART2,USART_FLAG_ORE) == SET)               // 检查 ORE 标志,防止开关总中断死机,放在接收中断前面
  105.         {
  106.                 USART_ClearFlag(USART2,USART_FLAG_ORE);
  107.                 USART_ReceiveData(USART2);
  108.         }
  109.         if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)               //接收中断
  110.         {
  111.                 u8 res = USART_ReceiveData(USART2);                                    //读取接收到的数据       
  112.                 if((USART2_RX_STA&0X7FFF)<USART2_MAX_RX_LEN-1)                  //超过数组长度的舍弃,空闲中断后处理数据前来的数据会继续接上
  113.                 {
  114.                         USART2_RX_BUF[USART2_RX_STA&0X7FFF]=res;
  115.                         USART2_RX_STA++;
  116.                 }
  117.         }
  118. }
复制代码
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2020-7-31 17:13:14 | 显示全部楼层
引脚2 3 的模式反了吧
回复

使用道具 举报

2

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2020-2-6
在线时间
37 小时
 楼主| 发表于 2020-7-31 17:26:21 | 显示全部楼层
nashui_sx 发表于 2020-7-31 17:13
引脚2 3 的模式反了吧

是的,但是改过来之后还是不行,没有数据返回
回复

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5137
金钱
5137
注册时间
2014-8-26
在线时间
1316 小时
发表于 2020-7-31 17:52:17 | 显示全部楼层
回复

使用道具 举报

2

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2020-2-6
在线时间
37 小时
 楼主| 发表于 2020-7-31 17:53:56 | 显示全部楼层

感谢前辈,我再对比看看
回复

使用道具 举报

2

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2020-2-6
在线时间
37 小时
 楼主| 发表于 2020-7-31 17:55:40 | 显示全部楼层
login_FAE 发表于 2020-7-31 17:52
http://www.openedv.com/forum.php?mod=viewthread&tid=289455&extra=page%3D1%26filter%3Dtypeid%26typeid ...

跳线帽是好的,没有动
回复

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3622
金钱
3622
注册时间
2019-8-14
在线时间
1054 小时
发表于 2020-7-31 20:46:21 | 显示全部楼层
重定义修改了吗
回复

使用道具 举报

2

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2020-2-6
在线时间
37 小时
 楼主| 发表于 2020-8-1 07:42:24 | 显示全部楼层
hou18 发表于 2020-7-31 20:46
重定义修改了吗

您说的是哪个重定义呀。这个MY_USART2_Init(void)的重定义倒是修改了。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-7-26
在线时间
4 小时
发表于 2020-8-10 17:13:10 | 显示全部楼层
请教一下楼主是如何解决的?我也遇到了这个问题
回复

使用道具 举报

2

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2020-2-6
在线时间
37 小时
 楼主| 发表于 2020-8-11 15:31:40 | 显示全部楼层
hbalyx 发表于 2020-8-10 17:13
请教一下楼主是如何解决的?我也遇到了这个问题

啊。。。这,这就是个玄学问题。建议还是复制原子的例程,根据自己的需要改吧
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-8-23
在线时间
2 小时
发表于 2020-8-23 18:06:11 | 显示全部楼层
怎么解决的啊兄弟,
回复

使用道具 举报

2

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2020-2-6
在线时间
37 小时
 楼主| 发表于 2020-8-24 22:05:16 | 显示全部楼层
逆光xyz 发表于 2020-8-23 18:06
怎么解决的啊兄弟,

讲实在的,兄弟,我也不清楚是什么问题,有很多因素。建议直接根据例程改成自己需要的
回复

使用道具 举报

15

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
352
金钱
352
注册时间
2019-5-30
在线时间
78 小时
发表于 2020-10-21 13:37:33 | 显示全部楼层
CAUC190146233 发表于 2020-8-24 22:05
讲实在的,兄弟,我也不清楚是什么问题,有很多因素。建议直接根据例程改成自己需要的

所以你最后是怎么解决的?
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-29 21:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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