OpenEdv-开源电子网

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

AVR128和stm32的usart通信,求解

[复制链接]

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-11-17
在线时间
9 小时
发表于 2014-3-16 09:43:48 | 显示全部楼层 |阅读模式
STM32与avr128通信部成功,我已经完成了实物上的128与128之间的通信,证明128程序部存在问题,求解是不是我的stm32哪配置出问题了。
//发送机程序
#include <iom128v.h>
#include <macros.h>
#define  uchar unsigned char
#define  uint  unsigned int
#include"USART.h"
#pragma interrupt_handler usart_interrupt_receive:19
#define password 111
uchar rdata=0,flag=0;
void usart_init(uint baud)
{
UCSR0B=0X00;
UCSR0A=0X00;//控制寄存器清零
UCSR0C=(3<<UCSZ00);//8为数据位,1位停止位,无校验
 
baud=mclk/16/baud-1;//异步正常模式,异步倍数模式baud=mclk/8/baud-1;      
     UBRR0H=(uchar)(baud>>8);
UBRR0L=(uchar)baud; //设置波特率
 
UCSR0B|=BIT(TXEN0)|BIT(RXEN0)|BIT(RXCIE0);//发送接收使能,接收中断使能
 
SEI();
DDRE|=0X02;  
}
void usart_transmit(uchar data)
{
   while(!(UCSR0A&(BIT(UDRE0)))) ;//等待发射寄存器空
   UDR0=data;
   while(!(UCSR0A&(BIT(TXC0))));//等待发射结束
   UCSR0A|=BIT(TXC0);
}

void usart_interrupt_receive()
{
    UCSR0B&=~BIT(RXCIE0);//屏蔽接收结束中断
rdata=UDR0;
if(rdata==password){flag=1;}
else flag=0;
UCSR0B|=BIT(RXCIE0);//使能接收结束中断
}



extern uchar rdata,flag;
void main()
{
 uchar key=0;
 usart_init(9600);
 keypress_4_init();
 init_9851();
 load_fre_word(100);
 while(1)
 {
  key=keyscan_4();
  if(key)
  {
   switch(key)
   {
    case 1:fre_add();break;
    case 2:fre_minus();break;
    case 3:sweep_fre();break;
case 5:while(!flag);flag=0;break;//等待从机允许主机发送信号
   }
  }
 }
}
//stm32的usart串口2程序
void uart2_init(u32 pclk1,u32 bound)
{    
float temp;
u16 mantissa;
u16 fraction;   
temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分  
    mantissa<<=4;
mantissa+=fraction; 
RCC->APB2ENR|=1<<2;   //使能PORTA口时钟  
RCC->APB1ENR|=1<<17;  //使能串口2时钟 
GPIOA->CRL&=0XFFFFF00F; 
GPIOA->CRL|=0X00008B00;//IO状态设置
 
RCC->APB1RSTR|=1<<17;   //复位串口2
RCC->APB1RSTR&=~(1<<17);//停止复位     
//波特率设置
  USART2->BRR=mantissa; // 波特率设置  
USART2->CR1|=0X200C;  //1位停止,无校验位.
#ifdef EN_USART2_RX  //如果使能了接收
//使能接收中断
USART2->CR1|=1<<8;    //PE中断使能
USART2->CR1|=1<<5;    //接收缓冲区非空中断使能    
MY_NVIC_Init(3,1,USART2_IRQChannel,2);//组2,最低优先级 
#endif
}
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72);     //延时初始化 
uart_init(72,9600); //串口1初始化为9600
uart2_init(36,9600); //串口2初始化为9600
LCD_Init();
delay_ms(1000);
while(1)
{
if(flag)
{
flag=0;
LCD_ShowNum(140,20,rdata,3,12);
}
}
}



注stm32和avr128之间加了电平转换芯片,分别将3.3转5V,5V转3.3V.

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-16 12:39:45 | 显示全部楼层
回复 支持 反对

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-11-17
在线时间
9 小时
 楼主| 发表于 2014-3-17 14:42:38 | 显示全部楼层
回复【2楼】Badu_Space:
能帮解决一下吗,困扰我一个星期了
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-3-17 14:52:22 | 显示全部楼层
回复【3楼】loyforever:
---------------------------------
单独测试串口能调通再说
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-11-17
在线时间
9 小时
 楼主| 发表于 2014-5-16 20:59:50 | 显示全部楼层
回复【4楼】Badu_Space:
---------------------------------
单独和PC通信没问题啊
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-17 10:53:52 | 显示全部楼层
两片子接线正确?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-11-17
在线时间
9 小时
 楼主| 发表于 2014-5-17 18:29:31 | 显示全部楼层
回复【6楼】Badu_Space:
---------------------------------
恩,能不能给点实时性的建议啊
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-18 18:26:34 | 显示全部楼层
回复【7楼】loyforever:
---------------------------------
两个片子的串口通讯我很少用
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-18 21:18:47 | 显示全部楼层
stm32的配置没问题.
怀疑你的电平转换电路有问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-11-17
在线时间
9 小时
 楼主| 发表于 2014-5-19 16:04:26 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
我是用了两块电平转换芯片,分别将3.3-5,5-3.3
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-19 23:16:01 | 显示全部楼层
回复【10楼】loyforever:
---------------------------------
你测试下能不能用
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

65

主题

440

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-8-29
在线时间
17 小时
发表于 2014-5-20 09:29:08 | 显示全部楼层
电平转换电路问题,楼主说下是什么型号芯片
人生永远追逐着幻光,但谁把幻光看作幻光,谁便沉入无边的苦海
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-7 19:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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