OpenEdv-开源电子网

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

小白请教个串口的问题

[复制链接]

5

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2014-10-10
在线时间
42 小时
发表于 2014-10-10 12:13:03 | 显示全部楼层 |阅读模式
5金钱
#include "usart1.h"
#include "led.h"
#include "delay.h"
void USART1_Init(u32 baud)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
USART_DeInit(USART1); 
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);

USART_InitStructure.USART_BaudRate=baud;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
   USART_Cmd(USART1,ENABLE);

}

void USART1_IRQHandler(void)
{
u8 dat;
LED0=1;
LED1=0;
delay_ms(300);
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
LED0=0;
LED1=0;
delay_ms(500);
dat=USART_ReceiveData(USART1);
delay_ms(10);
LED0=1;
LED1=1;
delay_ms(300);
USART_SendData(USART1,dat);
//USART_ClearITPendingBit(USART1,USART_IT_RXNE);
//if(USART_GetITStatus(USART1,USART_IT_TC)!=0) USART_ClearITPendingBit(USART1,USART_IT_TC);
}


}
下载到战舰板上程序可以进入中断,可是运行到dat=USART_ReceiveData(USART1)时就跳出了中断程序了,也不知道有没读到数据,第一次接触STM32,搞不懂啊,想请教一下是为什么呢?

串口.rar

1.69 MB, 下载次数: 68

最佳答案

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

串口1初始化错了 !!错在哪 自己对比下  原子能用的代码!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-10-10 12:13:04 | 显示全部楼层
串口1初始化错了 !!错在哪 自己对比下  原子能用的代码!!
学无止境
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-10 20:10:06 | 显示全部楼层
你在中断里面搞这么多延时干什么???
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2014-10-10
在线时间
42 小时
 楼主| 发表于 2014-10-11 09:17:57 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我修改了下,把延时缩短了,发觉可以走完整个中断程序啊,可是串口助手那边收不到我发送出去的数据
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
LED0=0;
LED1=0;
delay_ms(100);
res=USART_ReceiveData(USART1);
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
USART_SendData(USART1,res);
  if(USART_GetITStatus(USART1,USART_IT_TC)!=0) USART_ClearITPendingBit(USART1,USART_IT_TC);  
LED0=1;
LED1=1;
delay_ms(100);
}
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-10-11 11:28:11 | 显示全部楼层
等你延时完   也结束了
学无止境
回复

使用道具 举报

5

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2014-10-10
在线时间
42 小时
 楼主| 发表于 2014-10-11 15:38:35 | 显示全部楼层
回复【4楼】jermy_z:
---------------------------------
跟延时有关系吗?我留一个延时主要是想看LED给指示我程序进到哪里,可是应该不会影响串口助手获得单片机返回的数据吧,可是我没有收到数据啊,可是LED上的变换步骤指示中断程序已经跑完了
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-10-11 15:49:59 | 显示全部楼层
是跑完了   数据也没收到  就这样
学无止境
回复

使用道具 举报

5

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2014-10-10
在线时间
42 小时
 楼主| 发表于 2014-10-11 15:53:29 | 显示全部楼层
回复【6楼】jermy_z:
---------------------------------
那我把所有的延时什么的都去掉了,一样是没数据返回啊,这是为什么啊?
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-10-11 16:26:40 | 显示全部楼层
把你工程发上来  你这样讲 看不出什么东西来
学无止境
回复

使用道具 举报

5

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2014-10-10
在线时间
42 小时
 楼主| 发表于 2014-10-11 17:07:36 | 显示全部楼层
回复【8楼】jermy_z:
---------------------------------
压缩文件发上来了,麻烦你帮看下了
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-10-11 17:12:07 | 显示全部楼层
嗯  我看看
学无止境
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-10-11 17:17:12 | 显示全部楼层
你的根本就不会进中断!!
学无止境
回复

使用道具 举报

5

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2014-10-10
在线时间
42 小时
 楼主| 发表于 2014-10-11 18:04:59 | 显示全部楼层
我对照过了,时钟开启不同,以及原子大哥比我多了个EN_USART1_RX这个外,我真看不出来了。
那个时钟的开启我也是试过了,不开启RCC_APB2Periph_AFIO这个一样收不到啊。
EN_USART1_RX是原子大哥程序里面自己定义的一个变量,应该不影响吧,我只是直接跳过了判断EN_USART1_RX为1的这一步。
感觉好累啊,串口的初始化都做不好。。。
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-10-11 20:28:17 | 显示全部楼层
回复【13楼】lwy28808722:
---------------------------------
你先把你的初始化改了再说,唧唧歪歪的!
学无止境
回复

使用道具 举报

5

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2014-10-10
在线时间
42 小时
 楼主| 发表于 2014-10-12 23:07:29 | 显示全部楼层
回复【14楼】jermy_z:
---------------------------------
就是找不到哪里有问题啊,我知道怎么改就不会发帖问了
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-10-13 09:03:16 | 显示全部楼层
回复【15楼】lwy28808722:
---------------------------------
呵呵  都告诉你哪里出问题了!  你还问!  真不知道说啥了,不再回帖了!
学无止境
回复

使用道具 举报

5

主题

28

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2014-10-10
在线时间
42 小时
 楼主| 发表于 2014-10-13 09:42:32 | 显示全部楼层
回复【16楼】jermy_z:
---------------------------------
(*^__^*) 嘻嘻……不好意思了
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-30 14:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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