OpenEdv-开源电子网

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

F103 关于UART2的问题 求助朋友们 急!!!

[复制链接]

7

主题

22

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-1-10
在线时间
9 小时
发表于 2019-2-20 19:15:39 | 显示全部楼层 |阅读模式
10金钱
现使用战舰开发板和GPRS-DTU做一个采集数据加通讯的实验
DTU的例程Slave中是使用的 UART3来做串口的数据接收和发送的,我使用例程并改了下main.c的程序可以将 战舰开发板采集到的温湿度数据通过DTU发送到原子云上,但是由于后面要加上MPU6050占用了UART3的引脚,就打算使用UART2来做通讯,但是将例程中串口的所有配置都改为UART2后,原子云接收不到数据,查了一天了也没弄通,把简单的代码发一下,各位大神朋友能帮忙指点一下么?  
是不是UART2有特殊的配置之类的?

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

使用道具 举报

7

主题

22

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-1-10
在线时间
9 小时
 楼主| 发表于 2019-2-20 19:24:33 | 显示全部楼层
这是uart2.c文件


#include "sys.h"
#include "uart2.h"
#include "ringbuffer.h"

RingBuffer *pUart2RxBuf;


void uart2_init(u32 bound)
{
    //GPIO端口设置
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);        //使能USART2时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);        //使能GPIOA时钟

    //USART2_TX   GPIOA.2
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;          //PA.2
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure);                 //初始化GPIOA.2

    //USART2_RX          GPIOA.3
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;        //PA3
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;         //浮空输入
    GPIO_Init(GPIOA, &GPIO_InitStructure);               //初始化GPIOA.3

    //Usart2 NVIC配置
    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3 ;     //抢占优先级3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //子优先级3
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
    NVIC_Init(&NVIC_InitStructure);       

    //USART 初始化设置
    USART_InitStructure.USART_BaudRate = bound;              
    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);                 //初始化串口2
    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);        //开启串口接受中断
    USART_Cmd(USART2, ENABLE);                            //使能串口2
}


void USART2_IRQHandler(void)                                //串口2中断服务程序
{
    u8 Res;

    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)        //接收中断
    {
        Res = USART_ReceiveData(USART2);                        //读取接收到的数据
                       

        RingBuffer_In(pUart2RxBuf, &Res, 1);                        //放入缓存
    }
}

void USART2_Send_Data(u8 *data, u32 size)
{
    for(u32 i = 0; i < size; i++)
    {
        while((USART2->SR & 0X40) == 0);

        USART2->DR = data[i];
    }
}










回复

使用道具 举报

7

主题

22

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-1-10
在线时间
9 小时
 楼主| 发表于 2019-2-20 19:25:18 | 显示全部楼层
这是uart2.h文件


#ifndef __UART2_H
#define __UART2_H

#include "sys.h"
#include "ringbuffer.h"

extern RingBuffer *pUart2RxBuf;


void uart2_init(u32 bound);
void USART2_Send_Data(u8 *data, u32 size);


#endif
回复

使用道具 举报

7

主题

22

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-1-10
在线时间
9 小时
 楼主| 发表于 2019-2-20 19:31:23 | 显示全部楼层
这是main.c文件   

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "RingBuffer.h"
#include "protocol.h"
#include "adc.h"
#include "lsens.h"
#include "dht11.h"
#include "uart2.h"


int main(void)
{         
        u8 aa = 15;
        u8 bb = 01;         
//温湿度定义
        u8 t=0;                            
        u8 temperature1;              
        u8 humidity1;   
        u8 temperature2;
        u8 humidity2;
//光敏传感器定义
        u8 adcx;          
       
        delay_init();                     
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         
        uart_init(115200);                        
        uart2_init(115200);
       
        LED_Init();                                    
        Lsens_Init();                        
        DHT11_Init();                               
         
        my_mem_init(SRAMIN);                //初始化内存池
        pUart2RxBuf = RingBuffer_Malloc(1024);        //在内存池中分配串口2接收缓存1K

        while(DHT11_Init())         //DHT11初始化
        {

        }       

        while(1)
        {       
                if(t%10==0)                        //每100ms读取一次
                {                                                                          
                        DHT11_D_Read_Data(&temperature1,&humidity1);        //读取温湿度
                        DHT11_G_Read_Data(&temperature2,&humidity2);                       
                        adcx=Lsens_Get_Val();                //读取光照
               
                   //向DTU发送温湿度+光照数据
                        USART_SendData(USART2,temperature2);
                        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);

                        USART_SendData(USART2,humidity2);
                        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);

                        USART_SendData(USART2,adcx);
                        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);

                }
                          delay_ms(100);
               
                           t++;
               
                           if(t==20)
                           {
                                t=0;
                                LED0=!LED0;
                           }
               }
}
回复

使用道具 举报

7

主题

22

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-1-10
在线时间
9 小时
 楼主| 发表于 2019-2-20 19:32:30 | 显示全部楼层
我用上面的代码   之前都是UART3  可以通讯成功,原子云接收到正常数据
把代码UART3改为UART2配置后    , 通讯失败  
请教!!!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 13:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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