共2条
1/1 1 跳转至页
串口通讯引起系统的不稳定指教一下(昨天的广州论坛会)

问
昨天去广州参加论坛会,看到了浙江中控用飞利浦ARM做的PLC,感觉还不错
我的串口1是用来和GPS模块通讯的,设置如下:
1.在启动文件里设置
// UART1中断设置
VICVectAddr4 = (uint32)Uart1_Handler; // 设置UART1中断向量地址
VICVectCntl4 = 0x27; // UART1通道分配到第4通道
VICIntEnable = 0x00000080| VICIntEnable; // 使能UART1中断
// 设置串行口UART1的引脚功能
PINSEL0 = (PINSEL0 & 0xfff0ffff) | 0x00050000; // 选择管脚为UART1
U1LCR = 0x83; // 允许访问分频因子寄存器
U1DLM = (Fpclk / (16*DRIVER_UART1_BPS))/256; // 设置波特率
U1DLL = (Fpclk / (16*DRIVER_UART1_BPS))%256; // 设置波特率
U1LCR = 0x03; // 禁止访问分频因子寄存器 且设置为8,1,n
U1IER = 0x03; // 发送中断,接收中断,BIT0是RBR使能中断,BIT1是THRE使能中断
U1FCR = 0x00; // 初始化FIFO
2.中断程序:
void IRQ_UART1_SERVERS(void)
{
uint8 UART1_IRQ_CHOICE,UART1_RBR_TEMP; // 程序变量
UART1_IRQ_CHOICE = U1IIR; // 读状态,同时清中断
VICVectAddr = 0x00; // 通知VIC中断处理结束
if(UART1_IRQ_CHOICE & 0x02) // 发送中断
{
if(GPRS_SEND_INDEXS < GPRS_SEND_NUMBER) // 发送数据
{
//Terminal_String_Intermit("\n发送数据");
U1THR = GPRS_SEND_AMORTIZE[GPRS_SEND_INDEXS];
GPRS_SEND_INDEXS++;
}
else if(GPRS_SEND_INDEXS >= GPRS_SEND_NUMBER) // 发送最后一个字节引起的中断
{
// 释放该空间
OSSemPost(GPRS_SEND_POWER); // 发出串品操作权空闲信号量
}
}// 此处插入发送处理程序
if(UART1_IRQ_CHOICE & 0x04) // 接收中断
{
//Terminal_String_Intermit("\n接收中断");
UART1_RBR_TEMP = U1RBR; // 从寄存器取出数据
// 数据入串口接收缓冲区
GPRS_RECEIVE_AMORTIZE[GPRS_RECEIVE_INDEXS] = UART1_RBR_TEMP;
GPRS_RECEIVE_INDEXS++; // 索引加1
GPRS_RECEIVE_NUMBER++; // 个数加1
if(GPRS_RECEIVE_INDEXS >= GPRS_RECEIVE_SIZE) // 判断索引值
{
GPRS_RECEIVE_INDEXS = 0; // 索引值复位
}
GPRS_RECEIVE_AMORTIZE[GPRS_RECEIVE_INDEXS] = '\0'; // 加结束符
}// 此处插入接收处理程序
// 串口中断服务程序完毕
}
出现现象,系统以常自动重启,如果我把GPS模块去掉,也就是说串口不再接收任何数据,系统就会稳定运行了,我想应该是我的串口设置错误吧,可这是老周的设置,我仔细对照数据手册也没有发现任何问题
答 1: 有这定义Uart1_Handler HANDLER IRQ_UART1_SERVERS ; 串口1中断 答 2: 怎么没有人回我呢?再顶 答 3: 我也遇到这样情况啊我也遇到这样情况啊,搞了好几天了,还没解决,头疼! 答 4: 电源问题 答 5: 电源不会有问题,用了非常高档的电源了老周怎么不出来说句话啊??
好几个人都碰到这个问题了。
答 6: 尽量找自己的问题吧呵呵,周公最近可能比较忙,还是我来回答你吧:
串口我们用的很好.关于串口论坛上有很多例子.
建议你仔细找你其它程序(比如RTOS)上的原因. 答 7: 串口和PC机通讯我用的是2114:如果在板子上电以前打开PC机的串口使其处于通讯壮态后再给板子上电程序就不能够正常运行不知道下位机程序跑到那儿去了!但是在板子上电工作以后再设置PC机串口打开通讯的话就可以正常运行了.查了好久也找不到原因!
我的串口1是用来和GPS模块通讯的,设置如下:
1.在启动文件里设置
// UART1中断设置
VICVectAddr4 = (uint32)Uart1_Handler; // 设置UART1中断向量地址
VICVectCntl4 = 0x27; // UART1通道分配到第4通道
VICIntEnable = 0x00000080| VICIntEnable; // 使能UART1中断
// 设置串行口UART1的引脚功能
PINSEL0 = (PINSEL0 & 0xfff0ffff) | 0x00050000; // 选择管脚为UART1
U1LCR = 0x83; // 允许访问分频因子寄存器
U1DLM = (Fpclk / (16*DRIVER_UART1_BPS))/256; // 设置波特率
U1DLL = (Fpclk / (16*DRIVER_UART1_BPS))%256; // 设置波特率
U1LCR = 0x03; // 禁止访问分频因子寄存器 且设置为8,1,n
U1IER = 0x03; // 发送中断,接收中断,BIT0是RBR使能中断,BIT1是THRE使能中断
U1FCR = 0x00; // 初始化FIFO
2.中断程序:
void IRQ_UART1_SERVERS(void)
{
uint8 UART1_IRQ_CHOICE,UART1_RBR_TEMP; // 程序变量
UART1_IRQ_CHOICE = U1IIR; // 读状态,同时清中断
VICVectAddr = 0x00; // 通知VIC中断处理结束
if(UART1_IRQ_CHOICE & 0x02) // 发送中断
{
if(GPRS_SEND_INDEXS < GPRS_SEND_NUMBER) // 发送数据
{
//Terminal_String_Intermit("\n发送数据");
U1THR = GPRS_SEND_AMORTIZE[GPRS_SEND_INDEXS];
GPRS_SEND_INDEXS++;
}
else if(GPRS_SEND_INDEXS >= GPRS_SEND_NUMBER) // 发送最后一个字节引起的中断
{
// 释放该空间
OSSemPost(GPRS_SEND_POWER); // 发出串品操作权空闲信号量
}
}// 此处插入发送处理程序
if(UART1_IRQ_CHOICE & 0x04) // 接收中断
{
//Terminal_String_Intermit("\n接收中断");
UART1_RBR_TEMP = U1RBR; // 从寄存器取出数据
// 数据入串口接收缓冲区
GPRS_RECEIVE_AMORTIZE[GPRS_RECEIVE_INDEXS] = UART1_RBR_TEMP;
GPRS_RECEIVE_INDEXS++; // 索引加1
GPRS_RECEIVE_NUMBER++; // 个数加1
if(GPRS_RECEIVE_INDEXS >= GPRS_RECEIVE_SIZE) // 判断索引值
{
GPRS_RECEIVE_INDEXS = 0; // 索引值复位
}
GPRS_RECEIVE_AMORTIZE[GPRS_RECEIVE_INDEXS] = '\0'; // 加结束符
}// 此处插入接收处理程序
// 串口中断服务程序完毕
}
出现现象,系统以常自动重启,如果我把GPS模块去掉,也就是说串口不再接收任何数据,系统就会稳定运行了,我想应该是我的串口设置错误吧,可这是老周的设置,我仔细对照数据手册也没有发现任何问题
答 1: 有这定义Uart1_Handler HANDLER IRQ_UART1_SERVERS ; 串口1中断 答 2: 怎么没有人回我呢?再顶 答 3: 我也遇到这样情况啊我也遇到这样情况啊,搞了好几天了,还没解决,头疼! 答 4: 电源问题 答 5: 电源不会有问题,用了非常高档的电源了老周怎么不出来说句话啊??
好几个人都碰到这个问题了。
答 6: 尽量找自己的问题吧呵呵,周公最近可能比较忙,还是我来回答你吧:
串口我们用的很好.关于串口论坛上有很多例子.
建议你仔细找你其它程序(比如RTOS)上的原因. 答 7: 串口和PC机通讯我用的是2114:如果在板子上电以前打开PC机的串口使其处于通讯壮态后再给板子上电程序就不能够正常运行不知道下位机程序跑到那儿去了!但是在板子上电工作以后再设置PC机串口打开通讯的话就可以正常运行了.查了好久也找不到原因!
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
分享汽车通信和多媒体总线结构被打赏20分 | |
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
NUCLEO-U083RC学习历程38+串口通过队列的方式输出两个字符串被打赏20分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
分享电控悬架的结构与工作原理(一)被打赏20分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 |