OpenEdv-开源电子网

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

STM32串口通信调试没问题,就是通信不了,望指点

[复制链接]

12

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2018-7-12
在线时间
17 小时
发表于 2018-7-12 11:30:35 | 显示全部楼层 |阅读模式
void My_USART2_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStrue;//定义IO接口结构体
        USART_InitTypeDef USART_InitStrue;//定义串口相关结构体
        NVIC_InitTypeDef NVIC_InitStrue;//定义中断相关结构体

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//初始化GPIOA时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//初始化串口USART时钟

        GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;//推挽复用输出
        GPIO_InitStrue.GPIO_Pin=GPIO_Pin_2;//开启2号IO口
        GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;//端口速度10MHz
                                GPIO_Init(GPIOA,&GPIO_InitStrue);//GPIOA9初始化

        GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入
        GPIO_InitStrue.GPIO_Pin=GPIO_Pin_3;//开启3号IO口
        GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;//端口速度10MHz
                                GPIO_Init(GPIOA,&GPIO_InitStrue);//GPIO10初始化

        USART_InitStrue.USART_BaudRate=9600;//串口波特率设置
        USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件流
        USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//发送,接收使能
        USART_InitStrue.USART_Parity=USART_Parity_No;//无奇偶校验
        USART_InitStrue.USART_StopBits=USART_StopBits_1;//停止位为1
        USART_InitStrue.USART_WordLength=USART_WordLength_8b;//字长8位

                                USART_Init(USART2,&USART_InitStrue);//USART2初始化
        USART_Cmd(USART2,ENABLE);//使能串口2

        USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//中断配置:开启接收中断(接受缓存器非空使能,ENABLE)
        NVIC_InitStrue.NVIC_IRQChannel=USART2_IRQn;//定义中断通道
        NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;//开启中断通道
        NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;//设定抢占优先级为1
        NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;//设定子优先级为1
        NVIC_Init(&NVIC_InitStrue);//中断初始化
}

void USART2_IRQHandler(void)//编写中断处理函数
{
                                u8 res;//无符号字符res       
                                if(USART_GetITStatus(USART2,USART_IT_RXNE))//接收数据进入中断,判断串口2接收缓存器非空使能为1与否
                                {
                                         res= USART_ReceiveData(USART2); //为1,则将串口2的数据给变量
                                         USART_SendData(USART2,res);   //继续将此数据从USART1发送出去
                                }
}

int main(void)
{        
                                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设定优先级分组为2,2位抢占2位响应
                                My_USART2_Init();//调用串口函数
                          while(1);//无数据时死循环,有数据时进中断收数据发数据完了再读主程序
                                                         
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
发表于 2018-7-12 11:54:49 | 显示全部楼层
在主循环里发送 USART_SendData(USART2,'A');看串口有没有通;然后判断能不能进入中断函数
回复 支持 反对

使用道具 举报

12

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2018-7-12
在线时间
17 小时
 楼主| 发表于 2018-7-12 12:59:09 | 显示全部楼层
qiuzhicheng 发表于 2018-7-12 11:54
在主循环里发送 USART_SendData(USART2,'A');看串口有没有通;然后判断能不能进入中断函数

串口没有通,但是不知道什么问题,新人求解
回复 支持 反对

使用道具 举报

0

主题

58

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2381
金钱
2381
注册时间
2017-1-15
在线时间
316 小时
发表于 2018-7-12 13:33:43 | 显示全部楼层
1.注意主从机的波特率都要设置为一样的
2.初始化和串口中断处理函数最好参考正点原子的
3.使用示波器连接串口的发射或接收端与GND,查看是否有波形
回复 支持 反对

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
发表于 2018-7-12 13:44:06 | 显示全部楼层
串口波特率这些一样吗,引脚有没有接错
回复 支持 反对

使用道具 举报

12

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2018-7-12
在线时间
17 小时
 楼主| 发表于 2018-7-12 14:11:21 | 显示全部楼层
qiuzhicheng 发表于 2018-7-12 13:44
串口波特率这些一样吗,引脚有没有接错

我们公司指点了一下,把中断设置都屏蔽掉后用debug session就可以看到发AAAAA,但是下载到板子load又没反应
回复 支持 反对

使用道具 举报

12

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2018-7-12
在线时间
17 小时
 楼主| 发表于 2018-7-12 14:39:18 | 显示全部楼层
lf19880813 发表于 2018-7-12 13:33
1.注意主从机的波特率都要设置为一样的
2.初始化和串口中断处理函数最好参考正点原子的
3.使用示波器连 ...

谢谢您的指导
回复 支持 反对

使用道具 举报

12

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2018-7-12
在线时间
17 小时
 楼主| 发表于 2018-7-12 14:39:32 | 显示全部楼层
qiuzhicheng 发表于 2018-7-12 13:44
串口波特率这些一样吗,引脚有没有接错

谢谢指导
回复 支持 反对

使用道具 举报

29

主题

338

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1181
金钱
1181
注册时间
2018-4-13
在线时间
170 小时
发表于 2018-7-13 07:43:57 来自手机 | 显示全部楼层
本帖最后由 xiatianyun 于 2018-7-13 09:58 编辑

。。。。。。。。。。。。。。。。。。。
在手机上看的,不是很清楚,只看到注释,以为楼主用的是PA9/PA10.
回复 支持 反对

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
发表于 2018-7-13 08:08:32 | 显示全部楼层
看看接线有没有接错,Rx-Tx,Tx-Rx,GND-GND
然后是你串口助手的波特率有没有设置正确
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2023-3-3
在线时间
4 小时
发表于 2023-8-8 10:53:29 | 显示全部楼层
rmwhite 发表于 2018-7-12 12:59
串口没有通,但是不知道什么问题,新人求解

请问你解决了这个问题了吗?我也遇到了同样的问题,USART_SendData()也没起作用
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 05:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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