OpenEdv-开源电子网

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

不同型号单片机串口2通信问题

[复制链接]

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2015-5-23
在线时间
0 小时
发表于 2015-5-23 20:17:55 | 显示全部楼层 |阅读模式
5金钱

两个STM32单片机利用串口2进行通信,从大容量STM32f103VCT6(最高72MHz)USART2      向小容量STM32f100C8T6B(最高24MHz)USART2发送数据,引脚速率都设置为10MHz
问题:按键按下就从vct6串口2发送数据,可是一按按键100c8t6这边就死机(我用usart1不停打印数据,上面一发送,这边打印就停止了,原来转动的马达也停止转动),感觉一遇到中断,程序就停止了。找了一个星期都没找到原因。接收芯片只引出了串口1用来下载程序,没法用SWD或者JTAG调试,求大神指点。。。万分感谢。

[mw_shl_code=c,true] /******************************************************************************* 从芯片串口2接收函数 *******************************************************************************/ /* ******************************************************************************** * 函数名: usart2_init(); * 描述: 串口2初始化 * 输入: 波特率 * 返回值: 无 ******************************************************************************** */ void usart2_init(u32 bound) { //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //打开GPIOA,USART2时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //USART1_TX PA.2 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //TX复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); //USART1_RX PA.3 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure); //端口配置 /****参数 ****波特率:9600 ****停止位:1 ****奇偶校验:无 ****硬件流控制:无 ****模式:收发模式 */ USART_InitStructure.USART_BaudRate = bound; //设置为函数的形参 USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8位字长 USART_InitStructure.USART_StopBits = USART_StopBits_1; //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); //Usart2 NVIC 配置 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子优先级2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //开启中断 USART_Cmd(USART2, ENABLE); //使能串口 } /* ******************************************************************************** * 函数名: USART2_IRQHandler(); * 描述: 串口2中断服务程序 * 输入: 无 * 返回值: 无 ******************************************************************************** */ void USART2_IRQHandler(void) { uint8_t Receive; if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART2, USART_IT_RXNE); //清除接收中断 Receive = USART_ReceiveData(USART2); USART_RX_BUF[0] = Receive; } } /******************************************************* 主控芯片串口2发送函数 *******************************************************/ /* ******************************************************************************** * 函数名: usart2_init(); * 描述: 串口2初始化 * 输入: 波特率 * 返回值: 无 * 简述: 串口2与马达控制芯片通信,配置输出引脚10MHz ******************************************************************************** */ void usart2_init(u32 bound) { //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; // NVIC_InitTypeDef NVIC_InitStructure; USART_ClockInitTypeDef USART_ClockInitStructure; // RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //USART1_TX PA.2 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //USART1_RX PA.3 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); /* //Usart2 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器USART1 */ //USART 初始化设置 USART_InitStructure.USART_BaudRate = bound;//一般设置为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(USART2, &USART_InitStructure); /*配置串口时钟*/ USART_ClockInitStructure.USART_Clock = USART_Clock_Disable; USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; USART_ClockInit(USART2, &USART_ClockInitStructure); // USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启中断 USART_Cmd(USART2, ENABLE); //使能串口 }[/mw_shl_code]

最佳答案

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

感谢两位老师回帖,问题解决了,原来是用串口下载完后,BOOT0引脚还连接着USB转串口线,拔掉BOOT0脚与串口线的连线将其接地后,正常接收了。这是什么原因呢,希望能给予解答,谢谢。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2015-5-23
在线时间
0 小时
 楼主| 发表于 2015-5-23 20:17:56 | 显示全部楼层
感谢两位老师回帖,问题解决了,原来是用串口下载完后,BOOT0引脚还连接着USB转串口线,拔掉BOOT0脚与串口线的连线将其接地后,正常接收了。这是什么原因呢,希望能给予解答,谢谢。
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11555
金钱
11555
注册时间
2014-4-1
在线时间
1317 小时
发表于 2015-5-23 22:23:49 | 显示全部楼层
飞线,把调试接口装上。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-23 22:38:30 | 显示全部楼层
帮顶....
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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