野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8738|回复: 12

mini小板可以使用uart4嘛?如果可以我的配置哪里有问题??

[复制链接]
发表于 2015-9-1 17:12:36 | 显示全部楼层 |阅读模式
一个简单的程序,使用串口4在电脑上打印出字符,实现不了!!,火哥 请帮忙看一下我的配置有问题嘛
回复

使用道具 举报

 楼主| 发表于 2015-9-1 17:16:30 | 显示全部楼层
void UART4_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
       
        /* config USART1 clock */
        //RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE );
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE );

       
        /* USART1 GPIO config */
        /* Configure USART1 Tx (PA.09) as alternate function push-pull */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);   
        /* Configure USART1 Rx (PA.10) as input floating */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
        /* USART1 mode config */
        USART_InitStructure.USART_BaudRate = 115200;
        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(UART4, &USART_InitStructure);
       
       
        USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
       
        USART_Cmd(UART4, ENABLE);
}


void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        /* Configure the NVIC Preemption Priority Bits */  
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
       
        /* Enable the USARTy Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQn;         
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}


//重定向printf到uart4
int fputc(int ch, FILE *f)
{
       
                USART_SendData(UART4, (uint8_t) ch);
               
       
                while (USART_GetFlagStatus(UART4, USART_FLAG_TC) == RESET);               
       
                return (ch);
}


int fgetc(FILE *f)
{
               
                while (USART_GetFlagStatus(UART4, USART_FLAG_RXNE) == RESET);

                return (int)USART_ReceiveData(UART4);
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-1 18:04:02 | 显示全部楼层
//中断函数

void UART4_IRQHandler(void)
{
        uint8_t ch;
       
        if(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET)
        {        
            //ch = USART1->DR;
                        ch = USART_ReceiveData(UART4);
                  printf( "%c", ch );    //将接收到的数据直接返回打印
        }
         
}


主函数
int main(void)
{
                /* USART4 */
UART4_Config();
       
        NVIC_Configuration();

                printf("\r\n  你好 \r\n");       
        printf("\r\n 这是测试回显示程序 \r\n");

        for(;;)
        {
               
        }

程序运行不起来,串口调试助手打印不出来任何字,哪里配置错了,还是什么情况啊。。。火哥求救啊~~
回复 支持 反对

使用道具 举报

发表于 2015-9-1 18:51:01 | 显示全部楼层
http://www.firebbs.cn/thread-2278-1-1.html
链接中有所有串口的例程可以参考
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-1 19:45:30 | 显示全部楼层
亽亼 发表于 2015-9-1 18:51
http://www.firebbs.cn/thread-2278-1-1.html
链接中有所有串口的例程可以参考

你好火哥,这些例程我刚刚找了一遍,可是没有看到哪一个用到串口4或者串口5的,请问能具体告诉我哪一个例程用到了uart4或者uart5嘛,我是真心没有找到。。。。+_+ 辛苦火哥了~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-1 19:47:57 | 显示全部楼层
亽亼 发表于 2015-9-1 18:51
http://www.firebbs.cn/thread-2278-1-1.html
链接中有所有串口的例程可以参考

我上面的串口4,就是在你的串口1通信例程上修改过来的,因为我实在找不到串口4的例程在哪里。。。。麻烦你告诉一下哪个例程用到串口4或者串口5吧
回复 支持 反对

使用道具 举报

发表于 2015-9-2 08:41:04 | 显示全部楼层
不好意思,链接发错了,我以为哪个链接里边会有的,重新发个链接里边就有
http://pan.baidu.com/s/1mgiT89a
(升级程序(后续添加))
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-2 09:50:21 | 显示全部楼层
亽亼 发表于 2015-9-2 08:41
不好意思,链接发错了,我以为哪个链接里边会有的,重新发个链接里边就有
http://pan.baidu.com/s/1mgiT89 ...

谢谢火哥
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-2 10:31:36 | 显示全部楼层
亽亼 发表于 2015-9-2 08:41
不好意思,链接发错了,我以为哪个链接里边会有的,重新发个链接里边就有
http://pan.baidu.com/s/1mgiT89 ...

你好火哥,为什么这么多串口程序,只有串口1的在我板子上可以跑起来,其他的都没有反应啊,电脑端串口调试助手什么都打印不出来啊!!!!!!!!!!!!!原因出在哪里。。。。。
回复 支持 反对

使用道具 举报

发表于 2015-9-2 14:57:23 | 显示全部楼层
用其他串口要自己接线的,开发板那个USB接口默认接在串口1引脚的
回复 支持 反对

使用道具 举报

发表于 2015-9-4 11:50:59 | 显示全部楼层
本帖最后由 11kxmx 于 2015-9-4 11:59 编辑
虫虫 发表于 2015-9-1 18:04
//中断函数

void UART4_IRQHandler(void)


我用串口2试了正常  
刚开始犯了错误,只是将RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
简单改成   RCC_APB2PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB2Periph_GPIOA, ENABLE);
结果显示收到2个字节,但接收区里什么也没有
后分别使能后可以了

用的是学51单片机时的USB转TTL下载线,接到右边USART的PA2和PA3 ,不知你用USART4时PC10 PC11接在什么地方?
回复 支持 反对

使用道具 举报

发表于 2017-3-14 10:28:47 | 显示全部楼层
亽亼 发表于 2015-9-2 08:41
不好意思,链接发错了,我以为哪个链接里边会有的,重新发个链接里边就有
http://pan.baidu.com/s/1mgiT89 ...

链接不在了,请问到地址改到哪里了?
回复 支持 反对

使用道具 举报

发表于 2017-3-14 10:30:02 | 显示全部楼层

在吗?串口的下载的链接 不在了?你能分享一下吗
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-21 22:01 , Processed in 0.034265 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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