OpenEdv-开源电子网

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

imx6ull uart回显实验。只能发送不能接收回显的

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2019-7-31
在线时间
4 小时
发表于 2020-4-8 17:40:32 | 显示全部楼层 |阅读模式
1金钱
/*
* @Author       : SYM
* @Date         : 2020-04-07 17:59:50
* @LastEditors  : SYM
* @LastEditTime : 2020-04-08 17:31:07
* @FilePath     : /13_uart/bsp/uart/bsp_uart.c
* @Notes        :
*/
#include "bsp_uart.h"
//#include "bsp_gpio.h"

/**
* @description: 初始化uart1 ,波特率固定为115200
* @param  void
* @return: void
*/
void uart_init(void)
{
    /*初始化UART1的IO*/
    uart_io_init();

    /*初始化UART1*/
    //关闭UART
    uart_disable(UART1);
    uart_softreset(UART1);

    /*配置UART1*/
    UART1->UCR1 = 0;//清0
    UART1->UCR1 &= ~(1<<14);
    /*设置UART1 数据位、奇偶校验、停止位*/
    UART1->UCR2 = 0; //这里清0后。下面的bit6 .bit7,bit8就不用置0了
    UART1->UCR2 |= (1<<1) | (1<<2) | (1<<5) | (1<<14); //bit14置1是RTS不需要

    UART1->UCR3 |=(1<<2);//该位必须为1

    /*设置波特率115200*/
    UART1->UFCR &= ~(7<<7); //对RFDIV清0
    UART1->UFCR = (5<<7);  //设置为1分频 ,所以进入80MHZ

    //根据公式凑出来的
    UART1->UBIR = 71;
    UART1->UBMR = 3124;

    /*使能串口*/
    uart_enable(UART1);


}

/**
* @description: 初始化uart1-io口
* @param void
* @return: void
*/

void uart_io_init(void)
{   
    /*复用为GPIO1_IO016-RX 17-TX*/                 
    IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX,0);
    IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_RX,0);
    /*设置GPIO_IO016、17电气属性*/
    IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX,0x10B0);
    IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_RX,0x10B0);

}

/*
* @description                 : 波特率计算公式,
*                                                  可以用此函数计算出指定串口对应的UFCR,
*                                           UBIR和UBMR这三个寄存器的值
* @param - base                : 要计算的串口。
* @param - baudrate        : 要使用的波特率。
* @param - srcclock_hz        :串口时钟源频率,单位Hz
* @return                : 无
*/

/**
* @description: 关闭UART
* @param  - base                : 要关闭的串口。
* @return:
*/
void uart_disable(UART_Type *base)
{
    base->UCR1 &= ~(1<<0);//清0

}

/**
* @description: 打开UART
* @param - base                : 要打开的串口。
* @return:
*/
void uart_enable(UART_Type *base)
{
    base->UCR1 |= (1<<0);//置1

}

/* 软复位UART */
void uart_softreset(UART_Type *base)
{
    base->UCR2 &= ~(1 << 0);//清0
    while((base->UCR2 & 0X1) == 0); //取bit0位并判断是否为0
}


/* 通过UART1发送一个字符 */
void putc(unsigned char c)
{
    while(((UART1->USR2 >> 3 ) & 0X01) == 0);//取USR2 bit3位然后与0x1判断是否为0,1表示发送完成,
    UART1->UTXD = c; //要发送什么字符就向UTXD写入什么字符
}

/* 通过串口接收数据  返回值为unsigned char */
unsigned char getc(void)
{
     while(((UART1->USR2) & 0X01) == 0); /* 等待有数据可以读取 */
     return UART1->URXD; //接收到的数据都在URXD寄存器上。
}

/* 通过串口发送一串字符 */
void puts(char *str)
{
    char *p = str;

    while(*p)
        putc(*p++);
}













/*
* @Author       : SYM
* @Date         : 2020-03-27 02:06:49
* @LastEditors  : SYM
* @LastEditTime : 2020-04-08 17:34:32
* @FilePath     : /13_uart/project/main.c
*/
#include "main.h"
#include "bsp_clk.h"
#include "bsp_led.h"
#include "bsp_delay.h"
#include "bsp_beep.h"
#include "bsp_key.h"
#include "bsp_int.h"
#include "bsp_exti.h"
#include "bsp_epit.h"
#include "bsp_keyfilter.h"
#include "bsp_uart.h"


int  main(void)
{   

    unsigned char led_state = OFF;
    unsigned char a =0;

    /*中断初始化函数*/
    int_init();
    /*使能外设时钟*/
    imx6u_clkinit();
    clk_enable();
    /*延时初始化*/
    delay_init();

    /* 初始化LED */
    led_init();
    /*初始化蜂鸣器*/
    beep_init();
    /*初始化按键*/
    key_init();
    /* 初始化按键中断 */
    //exti_init();      
    /* 初始化EPIT1中断, 周期为500ms */
    //epit_init(0,66000000/2);
    /*初始化按键消抖定时器*/
    //keyfilter_init();
         /*初始化串口*/
    uart_init();


    //死循环,默认系统在里面运行
    while(1)
    {


        //delay_ms(500);
        puts("请输入1个字符:");
        a = getc();
        putc(a);//回显
        puts("\r\n");

        puts("你输入的字符为:");
        putc(a);
        puts("\r\n");
         led_state =!led_state;
        led_switch(LED0,led_state);
    }
    return 0;
}





最佳答案

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

哈哈。前几天发现问题了,复用IO。重复了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2019-7-31
在线时间
4 小时
 楼主| 发表于 2020-4-8 17:40:33 | 显示全部楼层

哈哈。前几天发现问题了,复用IO。重复了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2020-4-9 00:57:28 | 显示全部楼层
帮顶
回复

使用道具 举报

13

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2019-12-17
在线时间
57 小时
发表于 2020-5-24 23:33:53 | 显示全部楼层
感谢楼主,这个小问题我找了半天,看到你的帖子发现我也是这个问题,在这里我写一下IOMUXC_UART1_TX_DATA_UART1_RX和IOMUXC_UART1_RX_DATA_UART1_RX这两个很像,容易出现问题。写的时候的注意了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2020-8-8
在线时间
2 小时
发表于 2020-8-8 13:03:48 | 显示全部楼层
卧槽真是这个问题,IOMUXC_UART1_TX_DATA_UART1_RX和IOMUXC_UART1_RX_DATA_UART1_RX,完全没分清,浪费了3小时
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 08:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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