OpenEdv-开源电子网

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

串口接收问题

[复制链接]

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
发表于 2018-6-29 09:49:59 | 显示全部楼层 |阅读模式
5金钱
这是板二串口一的配置,板二串口一会发送数据。要求板一串口接收数据,再通过板一串口二发出到串口助显示
搞了很久,求大神支支招[mw_shl_code=c,true]void uart1_init(void)
{
        GPIO_InitTypeDef        GPIO_InitStructure;      
        USART_InitTypeDef       USART_InitStructure;
        DMA_InitTypeDef         DMA_InitStructure;
        NVIC_InitTypeDef        NVIC_InitStructure;  

       
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);     
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
       
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);   
       
  DMA_DeInit(DMA1_Channel4);  
  DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&USART1->DR;
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)TX;
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
  DMA_InitStructure.DMA_BufferSize = FIFO_NUM;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
  DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  DMA_Init(DMA1_Channel4, &DMA_InitStructure);
  DMA_Cmd(DMA1_Channel4, ENABLE);
       
        DMA_DeInit(DMA1_Channel5);
        DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&USART1->DR);
        DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RX;
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
        DMA_InitStructure.DMA_BufferSize = FIFO_NUM;
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
        DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
        DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
        DMA_Init(DMA1_Channel5,&DMA_InitStructure);
        DMA_Cmd(DMA1_Channel5,ENABLE);

       
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_BaudRate = 9600;  
        USART_Init(USART1,&USART_InitStructure);
        USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);               
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       
        USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);
        USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);
        USART_Cmd(USART1, ENABLE);
}[/mw_shl_code]

最佳答案

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

既然板二程序不是你写的,那么你应该先确定板二发送出来的数据是否正确。最简单的方法就是让板二直接接电脑串口调试助手测试一下,笨一点的就是通过示波器抓一下Tx的波形。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7539
金钱
7539
注册时间
2016-11-30
在线时间
641 小时
发表于 2018-6-29 09:50:00 | 显示全部楼层
既然板二程序不是你写的,那么你应该先确定板二发送出来的数据是否正确。最简单的方法就是让板二直接接电脑串口调试助手测试一下,笨一点的就是通过示波器抓一下Tx的波形。
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-6-29 10:03:56 | 显示全部楼层
你这还没搞好呀,收发都是自己写的,随便收发都可以呀,不过加个帧头或者帧尾更好处理
回复

使用道具 举报

39

主题

535

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1065
金钱
1065
注册时间
2018-3-27
在线时间
378 小时
 楼主| 发表于 2018-6-29 10:24:41 | 显示全部楼层
275891381 发表于 2018-6-29 10:03
你这还没搞好呀,收发都是自己写的,随便收发都可以呀,不过加个帧头或者帧尾更好处理

板二程序不是我写的,我只知道板二串口一的配置部分
回复

使用道具 举报

9

主题

87

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1435
金钱
1435
注册时间
2015-5-19
在线时间
132 小时
发表于 2018-6-29 10:56:30 | 显示全部楼层
分步调试,第一看板二发送数据是否正确;第二看板一接收数据是否正确,第三看板一发送数据是否正确;贴这么多代码也看不过来啊,这只是板二的发送部分初始化,那就看看发送有没有问题吧
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-29 04:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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