OpenEdv-开源电子网

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

串口通讯,按照原子哥视频操作的,可是不能实现发送接收

[复制链接]

9

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
金钱
376
注册时间
2018-9-21
在线时间
54 小时
发表于 2019-4-28 09:59:16 | 显示全部楼层 |阅读模式
10金钱

void My_USART1_Init(void)
{

//结构体要先声明
NVIC_InitTypeDef NVIC_InitStructure; //中断结构体, 命名为NVIC_InitStructure   
GPIO_InitTypeDef  GPIO_InitStructure;//GPIO初始化结构体,命名为 GPIO_InitStructure
USART_InitTypeDef  USART_InitStructure;//串口初始化结构体,命名为 USART_InitStructure

   //1使能相应时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能串口1时钟



     //2配置GPIO  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                                 // PA9端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                  //串口输出要设置为推挽复用输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;                 //IO口速度为10MHz                                     
GPIO_Init(GPIOA, &GPIO_InitStructure);//GPIO初始化 ,串口输入  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                                 // PA10端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;                  //串口输出要设置为浮空输入或带上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;                 //IO口速度为10MHz                                     
GPIO_Init(GPIOA, &GPIO_InitStructure);//GPIO初始化 ,串口输出   


   //3配置串口
USART_InitStructure.USART_BaudRate = 115200;    //波特率
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//不使用硬件流
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//使能功能,发送和接收都使能,用或运算
USART_InitStructure.USART_Parity = USART_Parity_No;//奇偶校验位
USART_InitStructure.USART_StopBits = 1;//停止位
USART_InitStructure.USART_WordLength = USART_WordLength_8b ;//字长
USART_Init(USART1,&USART_InitStructure);

USART_Cmd(USART1,ENABLE);//串口使能函数

//4 把串口挂到中断上

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE );//串口1,接收到数据后开启中断
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中断 //设置中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//抢占优先级为1 设置响应优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;// 子优先级位2 设置抢占优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据上面指定的参数初始化NVIC寄存器
}




//4中断服务函数
void USART1_IRQandler(void)//串口USART1接收到数据就产生中断,产生中断后就执行这个函数
{
   u8 res;
if(USART_GetITStatus(USART1,USART_IT_RXNE ))
        /*STM32固件库中提供了串口收发的标志位函数,包括USART_GetFlagStatus(…,…);和USART_GetITStatus(…,…);,
        两者容易混淆,重点区别就在于:前者返回值是中断标志位状态(读SR寄存器),
        后者返回值是中断发生与否的判断(读CR寄存器)*/
{
  res= USART_ReceiveData(USART1);//读取接收到的数据
    USART_SendData(USART1,res);//发送数据   
}
}






int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //需要在main里先设置分组
My_USART1_Init();
    while(1);
}



最佳答案

查看完整内容[请看2#楼]

你的代码我试了,没问题
人生不接受平淡,成功只相信拼搏。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-4-28 09:59:17 | 显示全部楼层
位卑未敢忘忧国 发表于 2019-4-28 12:59
肯定是代码有问题,用原子哥的例子是正常的。

你的代码我试了,没问题
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-4-28 10:17:37 | 显示全部楼层
代码没问题,检查接线吧
回复

使用道具 举报

2

主题

582

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2690
金钱
2690
注册时间
2014-5-23
在线时间
188 小时
发表于 2019-4-28 11:00:21 | 显示全部楼层
是否需要开启总中断,中断函数里是否需要清除中断标志位
回复

使用道具 举报

22

主题

271

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
405
金钱
405
注册时间
2019-3-21
在线时间
107 小时
发表于 2019-4-28 12:43:32 | 显示全部楼层
是不是波特率的问题,代码用的115200,串口调试助手也得用115200
回复

使用道具 举报

9

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
金钱
376
注册时间
2018-9-21
在线时间
54 小时
 楼主| 发表于 2019-4-28 12:58:18 | 显示全部楼层
1599064432 发表于 2019-4-28 12:43
是不是波特率的问题,代码用的115200,串口调试助手也得用115200

这个看过了,是一样的
人生不接受平淡,成功只相信拼搏。
回复

使用道具 举报

9

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
金钱
376
注册时间
2018-9-21
在线时间
54 小时
 楼主| 发表于 2019-4-28 12:59:17 | 显示全部楼层
nashui_sx 发表于 2019-4-28 10:17
代码没问题,检查接线吧

肯定是代码有问题,用原子哥的例子是正常的。
人生不接受平淡,成功只相信拼搏。
回复

使用道具 举报

9

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
金钱
376
注册时间
2018-9-21
在线时间
54 小时
 楼主| 发表于 2019-4-28 13:03:42 | 显示全部楼层
awsawzj 发表于 2019-4-28 11:00
是否需要开启总中断,中断函数里是否需要清除中断标志位

你说的是
NVIC_SETFAULTMASK();   //关闭总中断
NVIC_RESETFAULTMASK();//开放总中断
这个吧?
我用的是3.5的库,总中断也需要打开啊?
人生不接受平淡,成功只相信拼搏。
回复

使用道具 举报

22

主题

271

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
405
金钱
405
注册时间
2019-3-21
在线时间
107 小时
发表于 2019-4-28 15:26:40 | 显示全部楼层
nashui_sx 发表于 2019-4-28 15:19
你的代码我试了,没问题

请问你手上有串口采用DMA方式收发的例子吗,我刚学到DMA,,看了网上的资料还有点不太懂,Q1599064432,有的话加我q发点例子给我看一下,谢谢
回复

使用道具 举报

9

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
金钱
376
注册时间
2018-9-21
在线时间
54 小时
 楼主| 发表于 2019-4-28 15:35:58 | 显示全部楼层
谢谢你,我再去试试
回复

使用道具 举报

9

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
金钱
376
注册时间
2018-9-21
在线时间
54 小时
 楼主| 发表于 2019-4-28 15:37:27 | 显示全部楼层
nashui_sx 发表于 2019-4-28 09:59
你的代码我试了,没问题

谢谢你,我回去再试试,确实很奇怪
人生不接受平淡,成功只相信拼搏。
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-4-28 16:05:08 | 显示全部楼层
1599064432 发表于 2019-4-28 15:26
请问你手上有串口采用DMA方式收发的例子吗,我刚学到DMA,,看了网上的资料还有点不太懂,Q1599064432, ...

http://www.openedv.com/forum.php ... d=273874&extra=
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-4-28 16:20:41 | 显示全部楼层
位卑未敢忘忧国 发表于 2019-4-28 15:37
谢谢你,我回去再试试,确实很奇怪

我说的是这个初始化 和中断函数没问题,别的不能保证,这俩函数没问题
回复

使用道具 举报

9

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
金钱
376
注册时间
2018-9-21
在线时间
54 小时
 楼主| 发表于 2019-4-28 20:44:19 | 显示全部楼层
nashui_sx 发表于 2019-4-28 16:20
我说的是这个初始化 和中断函数没问题,别的不能保证,这俩函数没问题

麻烦大神帮我编译一下试试,看看问题出在什么地方

TEST.zip

6.29 MB, 下载次数: 138

人生不接受平淡,成功只相信拼搏。
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-4-28 21:22:08 | 显示全部楼层
位卑未敢忘忧国 发表于 2019-4-28 20:44
麻烦大神帮我编译一下试试,看看问题出在什么地方

USART1_IRQandler
USART1_IRQHandler
给你测试的时候直接粘贴的函数内部,你这写错了
回复

使用道具 举报

9

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
金钱
376
注册时间
2018-9-21
在线时间
54 小时
 楼主| 发表于 2019-4-28 22:09:21 | 显示全部楼层
nashui_sx 发表于 2019-4-28 21:22
USART1_IRQandler
USART1_IRQHandler
给你测试的时候直接粘贴的函数内部,你这写错了

谢谢,成功了。
人生不接受平淡,成功只相信拼搏。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 05:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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