OpenEdv-开源电子网

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

STM32F302的USART1无法发送和接收,是哪配置不对?求助

[复制链接]

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
发表于 2014-8-15 15:24:18 | 显示全部楼层 |阅读模式
5金钱
串口配置代码如下
[mw_shl_code=c,true]void uart_init(uint32_t bound) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);//使能A口时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_SYSCFG,ENABLE);//使能串口1时钟 //USART_DeInit(USART1); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用 GPIO_InitStructure.GPIO_OType =GPIO_OType_PP ; //推挽输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_PinAFConfig(GPIOA, GPIO_Pin_9, GPIO_AF_7);//USART1串口复用 GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA.10 //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//输入 //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//浮空 GPIO_PinAFConfig(GPIOA, GPIO_Pin_10, GPIO_AF_7);//USART1串口复用 GPIO_Init(GPIOA, &GPIO_InitStructure); USART_StructInit(&USART_InitStructure); USART_InitStructure.USART_BaudRate = bound;//波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制 USART_Init(USART1, &USART_InitStructure); //初始化串口 #if EN_USART1_RX //如果使能了接收 //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断 #endif USART_Cmd(USART1, ENABLE); //使能串口 }[/mw_shl_code]

最佳答案

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

回复【3楼】Admin: --------------------------------- 找到错误了,GPIO_PinAFConfig(GPIOA, GPIO_Pin_10, GPIO_AF_7);//USART1串口复用 应该是GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_7);//USART1串口复用 不过现在还有个问题,F302复位或者重新上电或者重新下载程序后程序运行就会异常,我在主程序里用LED翻转来看程序循环速度,明显异常的时候LED翻转更快,而且串口出来的是乱码 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
 楼主| 发表于 2014-8-15 15:24:19 | 显示全部楼层
回复【3楼】Admin:
---------------------------------
找到错误了,GPIO_PinAFConfig(GPIOA, GPIO_Pin_10, GPIO_AF_7);//USART1串口复用
应该是GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_7);//USART1串口复用

不过现在还有个问题,F302复位或者重新上电或者重新下载程序后程序运行就会异常,我在主程序里用LED翻转来看程序循环速度,明显异常的时候LED翻转更快,而且串口出来的是乱码
异常发生的概率有50%左右,几乎是每次上电或者复位、重新下载后就换一个状态
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
 楼主| 发表于 2014-8-15 16:25:34 | 显示全部楼层
另外,用KEIL  Debug时有几句不会执行


但是这几个值一般用默认值
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-8-15 18:31:47 | 显示全部楼层
一眼看去好像不会有什么错误哦。。。

F4是这样配置:
[mw_shl_code=c,true]void uart_init(u32 bound){ //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟 //USART_DeInit(USART1); //复位串口1 GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1 GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1 //USART1_TX PA.9 PA.10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10 //USART 初始化设置 USART_InitStructure.USART_BaudRate = bound;//一般设置为9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式 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); //初始化串口 USART_Cmd(USART1, ENABLE); //使能串口 USART_ClearFlag(USART1, USART_FLAG_TC); #if EN_USART1_RX USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断 //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、 #endif }[/mw_shl_code]

我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

2

主题

582

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2690
金钱
2690
注册时间
2014-5-23
在线时间
188 小时
发表于 2014-8-16 15:59:26 | 显示全部楼层
我好像还开AFIO时钟,RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_AFIO,ENABLE)
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
 楼主| 发表于 2014-8-18 08:17:52 | 显示全部楼层
回复【3楼】Admin:
---------------------------------
Debug的时候那几句不执行是怎么回事呢?我用的KEIL5
回复

使用道具 举报

8

主题

125

帖子

0

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-27
在线时间
120 小时
 楼主| 发表于 2014-8-18 08:52:49 | 显示全部楼层
回复【5楼】红木甲板:
---------------------------------
把代码优化调到0就可以了,囧……


回复【4楼】awsawzj:
---------------------------------
F30x的库函数没找到这个
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-26 06:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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