注册
登录
电子工程世界-论坛
返回首页
EEWORLD首页
频道
EE大学堂
下载中心
Datasheet
专题
单片机
物联网
汽车电子
嵌入式
手机/便携
模拟电子
家用电子
网络通信
电源管理
工业控制
测试测量
半导体设计/制造
安防电子
传感器
医疗电子
kermit的个人空间
https://home.eeworld.com.cn/space-uid-516731.html
[收藏]
[复制]
[分享]
[RSS]
空间首页
动态
记录
日志
相册
主题
分享
留言板
个人资料
借用开发板
论坛
淘帖
Collection
查看新帖
最新回复
社区活动
联系管理员
我的空间
帖子
日志
收藏
好友
勋章
积分
安全验证
请完成以下验证码
日志
STM32F103 串口2输出不对
已有 6389 次阅读
2013-11-26 13:43
新手学习STM32,完成代码后发现,串口1收发正常,串口2发送不正常(仿真单步运行,数据正常;全速运行数据不对),请帮忙看看……
串口代码:
static void USART_NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Configure the NVIC Preemption Priority Bits */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
/* Enable the USART1 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //设置串口1中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* Enable the USART2 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //设置串口2中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/***********************************************************************
* 函数名:USART_Config
* 描述 :USART1 USART1 双串口 GPIO 配置,工作模式配置。115200 8-N-1
* 输入 :无
* 输出 : 无
* 调用 :外部调用
***********************************************************************/
void USART_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
/* config USART1 clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB2Periph_GPIOA,ENABLE);
/* USART1 GPIO config */
/* Configure USART1 Tx (PA9)and USART2 Tx (PA2) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART1 Rx (PA10)and USART2 Rx (PA3) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* USART1 mode config */
USART_InitStructure.USART_BaudRate = 115200;
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);
USART_Cmd(USART1, ENABLE); //配置串口参数函数
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //使能接收中断
// USART_ITConfig(USART1, USART_IT_TC, ENABLE);
/* USART2 GPIO config */
/* Configure USART1 Tx (PA9)and USART2 Tx (PA2) as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Configure USART1 Rx (PA10)and USART2 Rx (PA3) as input floating */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* USART2 mode config */
USART_InitStructure.USART_BaudRate = 38400;
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(USART2, &USART_InitStructure);
USART_Cmd(USART2, ENABLE); //配置串口参数函数
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //使能接收中断
// USART_ITConfig(USART1, USART_IT_TC, ENABLE); //使能发送中断
USART_NVIC_Configuration(); //中断向量配置
}
中断代码:
u8 USART1_Rx_Data[Usart1_Rx_Len];
u8 Usart1_Rx_Flag = 0;
u8 Uasrt1_Len = 0;
u8 PC_Receive_Flag = 0;
void USART1_IRQHandler(void)
{
u8 RES = 0;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
RES=USART_ReceiveData(USART1);
Rx_Time = 0; //清空定时器
//接收数据
if((Uasrt1_Len < USART1_Rx_Data[1])&&(Usart1_Rx_Flag == 0x02))
{
USART1_Rx_Data[Uasrt1_Len+2] = RES;
Uasrt1_Len++;
}
//接受数据长度
if(Usart1_Rx_Flag == 0x01)
{
USART1_Rx_Data[1] = RES;
Usart1_Rx_Flag = 0x02;
}
//判断包头 //命令处理不完,不接新收数据
if((RES == Start_Frame) && (Usart1_Rx_Flag == 0x00)&& (PC_Receive_Flag == 0x00))
{
USART1_Rx_Data[0] = RES;
Usart1_Rx_Flag = 0x01;
Uasrt1_Len = 0;
START_TIME3; //开启定时器
}
//接受完成
if((Uasrt1_Len >= USART1_Rx_Data[1])&&(Usart1_Rx_Flag == 0x02))
{
PC_Receive_Flag = 1;
Usart1_Rx_Flag = 0;
Uasrt1_Len = 0;
STOP_TIME3;
Rx_Time =0;
}
}
USART_ClearITPendingBit(USART1, USART_IT_RXNE );
}
/**------------------------------------------------------
* 函数名:USART2_IRQHandler(void)
* 描述 :串口中断函数
* 输入 :无
* 输出 : 接收到的数据 ,放在数组USART_Rx_Data[]中
* 调用 :无
**-----------------------------------------------------
*/
u8 USART2_Rx_Data[Usart2_Rx_Len];
u8 Usart2_Rx_Flag = 0;
u8 Uasrt2_Len = 0;
u8 EndDevice_Receive_Flag = 0;
void USART2_IRQHandler(void)
{
u8 RES = 0;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
RES=USART_ReceiveData(USART2);
Rx_Time = 0; //清空定时器
if((Uasrt2_Len < (Usart2_Rx_Len-1))&&(Usart2_Rx_Flag == 0x01))
{
USART2_Rx_Data[Uasrt2_Len+1] = RES;
Uasrt2_Len++;
}
if((RES == 0xAA) &&(Usart2_Rx_Flag == 0x00)&& (EndDevice_Receive_Flag == 0x00))//ZIGBEE包头 0xaa
{
USART2_Rx_Data[0] = RES;
Usart2_Rx_Flag = 0x01;
Uasrt2_Len = 0;
EndDevice_Receive_Flag = 0;
START_TIME3; //开启定时器
}
if((Uasrt2_Len >= (Usart2_Rx_Len-1))&&(Usart2_Rx_Flag == 0x01))
{
LED1 = ~LED1;
Usart2_Rx_Flag = 0;
Uasrt2_Len = 0;
EndDevice_Receive_Flag = 1;
STOP_TIME3;
}
}
USART_ClearITPendingBit(USART2, USART_IT_RXNE );
}
本文来自论坛,点击查看完整帖子内容。
收藏
邀请
举报
全部
作者的其他最新日志
•
TC35西门子短信模块发送ERROR
评论 (
0
个评论)
涂鸦板
您需要登录后才可以评论
登录
|
注册
评论
kermit
加为好友
给我留言
打个招呼
发送消息
热门文章
头条资讯
字节跳动一收再收
ChinaJoy高通骁龙主题馆看点揭秘
AMD总裁兼首席执行官苏姿丰博士出席CES 2021,展示了一个数字化先行的世界
使用trace-event解决系统不能深度睡眠的问题
毫米波立体成像雷达
业内人士警告:假冒芯片正滑入供应链
新增数据手册
MLX90364LVS-ADD-203-RE
LS1501-9ERG
MS27471H-21D-27XC
OP07AY
VDMHLB-10.000MHZ
TGR41-4006V12LF
热搜器件
C0603C160M5HACAUTO
MAX981CPA
BFC237125394
IPP60R080P7
7440680100
1210Y0500152MDR
推荐下载
嵌入安全技术的Blackfin处理器
立錡7300+8477
期刊论文:一种自适应小波图像压缩算法
间歇式微波真空干燥试验设备及其自动化监测系统的研究
2006-8-10_WCDMA核心网技术_2003WCDMA
最新MTK----FlashTool_v2.9.1001
推荐关注
全新国产XD08M3232红外感应MCU功能特性分享
驱动钛丝(SMA)的可靠性设计(9) 钛丝的驱动电路控制(下)
【Follow me第二季第4期】任务二 通过串口打印六轴原始数据
电容和电阻与晶振如何搭配运作
GB/T 17626.6-2008 电磁兼容 试验和测量技术 射频场感应的传导骚扰抗扰度
OpenHarmony属性信息怎么修改?触觉智能RK3566鸿蒙开发板来演示