STM32F103ZET6 5串口通信问题
更新时间:2024-04-04 21:36:01 阅读量: 综合文库 文档下载
STM32F103ZET6 5串口通信问题
今天调试成功STM32F103ZET6 5串口通信,其中主要是注意点是:
1、 USATR1和USATR2,USATR3,UATR4,UATR5挂载的时钟不一样,第一个挂载在
APB2上,其余四个挂载在APB1上;例如:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //USART1时钟配置 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //USART2时钟配置 ; RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //USART3时钟配置 ; RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE); //UART4时钟配置 ; RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5,ENABLE); //UART5时钟配置 ; 2、 如上例中红色字显示一样,UART4和UART5是不一样的,
UART:universal asynchronous receiver and transmitter通用异步收发器
USART:universal synchronous asynchronous receiver and transmitter通用同步异步收发器。一般而言,单片机中,名称为UART的接口一般只能用于异步串行通讯,而名称为USART的接口既可以用于同步串行通讯,也能用于异步串行通讯。 下面贴出我的代码: void RCC_Configuration(void); void GPIO_Configuration(void); void NVIC_Configuration(void); void USART_Configuration(void);
int main(void) {
RCC_Configuration(); //系统时钟初始化 GPIO_Configuration();//端口初始化 USART_Configuration(); NVIC_Configuration(); while(1); }
void RCC_Configuration(void) {
SystemInit();//72m
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //USART2时钟配置 ; RCC_APB1PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //USART2,3端口复用; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //USART1端口复用; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //USART3时钟配置 ; RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE); //UART4时钟配置 ;
}
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5,ENABLE); //UART5时钟配置 ;
void GPIO_Configuration(void) {
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; //LED1
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//USATR5_RX GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;//USATR5_TX GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;//UATR4_RX GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//UATR4_TX GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;//USATR3_RX GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//USATR3_TX GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;//USATR2_RX GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA,&GPIO_InitStructure); //LED
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//USATR2_TX GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; }
void NVIC_Configuration(void) {
NVIC_InitTypeDef NVIC_InitStructure;
//USART5的中断优先级配置
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //USART4的中断优先级配置
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //USART3的中断优先级配置 //USART2的中断优先级配置
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5; //LED0 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOE,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure);
void USART_Configuration(void) {
USART_InitTypeDef USART_InitStructure;
//USART5的串口配置
USART_InitStructure.USART_BaudRate=9600; USART_Init(UART4,&USART_InitStructure);
USART_ITConfig(UART4,USART_IT_RXNE,ENABLE); USART_Cmd(UART4,ENABLE);
USART_ClearFlag(UART4,USART_FLAG_TC); //USART4的串口配置
USART_InitStructure.USART_BaudRate=9600;
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(USART3,&USART_InitStructure);
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); USART_Cmd(USART3,ENABLE);
USART_ClearFlag(USART3,USART_FLAG_TC); USART_Init(USART2,&USART_InitStructure);
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); USART_Cmd(USART2,ENABLE);
USART_ClearFlag(USART2,USART_FLAG_TC); //USART3的串口配置
USART_InitStructure.USART_BaudRate=9600;
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; //USART2的串口配置
USART_InitStructure.USART_BaudRate=9600;
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_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(UART5,&USART_InitStructure);
USART_ITConfig(UART5,USART_IT_RXNE,ENABLE); USART_Cmd(UART5,ENABLE);
USART_ClearFlag(UART5,USART_FLAG_TC);
一下为中断代码:
void USART2_IRQHandler(void) {
u32 k;
if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET) {
k=USART_ReceiveData(USART2); }
void USART3_IRQHandler(void) {
u32 k;
if(USART_GetITStatus(USART3,USART_IT_RXNE)!=RESET) {
k=USART_ReceiveData(USART3);
if(k =='a')
{
GPIO_ResetBits(GPIOE,GPIO_Pin_5); USART_SendData(USART2,'1');
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
} else {
GPIO_SetBits(GPIOE,GPIO_Pin_5); USART_SendData(USART2,'3');
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
}
}
}
if(k =='c')
{
GPIO_ResetBits(GPIOE,GPIO_Pin_5); USART_SendData(USART3,'1');
while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET);
} else {
GPIO_SetBits(GPIOE,GPIO_Pin_5); USART_SendData(USART3,'3');
while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET);
}
}
void UART4_IRQHandler(void) {
u32 k;
if(USART_GetITStatus(UART4,USART_IT_RXNE)!=RESET) {
k=USART_ReceiveData(UART4); }
void UART5_IRQHandler(void) {
if(k =='c')
{
GPIO_ResetBits(GPIOE,GPIO_Pin_5); USART_SendData(UART4,'1');
while(USART_GetFlagStatus(UART4,USART_FLAG_TXE)==RESET);
} else {
GPIO_SetBits(GPIOE,GPIO_Pin_5); USART_SendData(UART4,'3');
while(USART_GetFlagStatus(UART4,USART_FLAG_TXE)==RESET);
}
}
u32 k;
if(USART_GetITStatus(UART5,USART_IT_RXNE)!=RESET) {
k=USART_ReceiveData(UART5); }
if(k =='c')
{
GPIO_ResetBits(GPIOE,GPIO_Pin_5); USART_SendData(UART5,'1');
while(USART_GetFlagStatus(UART5,USART_FLAG_TXE)==RESET);
} else {
GPIO_SetBits(GPIOE,GPIO_Pin_5); USART_SendData(UART5,'3');
while(USART_GetFlagStatus(UART5,USART_FLAG_TXE)==RESET);
}
}
正在阅读:
新加坡的监督机制及其对我国的启示06-03
塔吊的分类和型号06-03
2018-2019-有关开题报告选题依据-word范文 (1页)03-08
MHDD硬盘修复详细技术教程08-05
赴英留学(Tier4)家长同意书模板11-18
减速器课程设计F=3000N03-15
MP3-MP6播放器探秘 - 图文07-10
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 串口
- STM32F103ZET6
- 通信
- 问题
- 五个意识 五种能力 不断推进连队正规化建设
- 轨道交通装备项目可行性研究报告(目录) - 图文
- 相变材料种类及优缺点比较
- 《中医统计学》习题及答案2010.9.12
- 系统解剖学试题
- Pe管施工方案
- 印刷厂生产过程控制程序
- 新人教版小学数学六年级下册《圆柱和圆锥的复习》教学反思
- c语言版数据库骑士游历
- 2016年保育员考试试题(含答案)
- 法律文书名词解释1
- 2018-2019-幼儿园卫生保健工作总结4篇-易修改word版(16页)
- 三年级上天津与世界教案 - 图文
- 主题西餐厅设计论文 - 图文
- 信号与系统实验答案
- 浅谈电气化铁路接触网的维护与检修
- 2017年继续教育考试题及答案
- 关于成立基层工会小组和选举产生工会小组长的通知
- 征管评估稽查练习20161006
- 第四章 电路探秘分节课时练习(含最新中考试题) - 图文