野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13336|回复: 12

用的ISOmini串口问题

[复制链接]
发表于 2016-11-4 15:37:00 | 显示全部楼层 |阅读模式
本帖最后由 ldy1059046188 于 2016-11-4 15:39 编辑

用的资料里火哥串口中断的程序,连到电脑上之后发送出来的是乱码,有知道什么问题的吗?. QQ图片20161104153532.png
主函数
#include "stm32f10x.h"
#include "bsp_usart1.h"

/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{
                /* USART1 配置模式为 115200 8-N-1,中断接收 */
        USART1_Config();
       
        NVIC_Configuration();

        printf("\r\n 这是一个串口中断接收回显实验 \r\n");       
        printf("\r\n 请在超级终端或者串口调试助手输入字符 \r\n");       

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

串口设置
#include "bsp_usart1.h"

/**
  * @brief  USART1 GPIO 配置,工作模式配置。9600 8-N-1
  * @param  无
  * @retval 无
  */
void USART1_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
       
        /* config USART1 clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
       
        /* USART1 GPIO config */
        /* Configure USART1 Tx (PA.09) as alternate function push-pull */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);   
        /* Configure USART1 Rx (PA.10) as input floating */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &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(USART1, &USART_InitStructure);
       
        /* 使能串口1接收中断 */
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
       
        USART_Cmd(USART1, ENABLE);
}

/// 配置USART1接收中断
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 = USART1_IRQn;         
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}


/// 重定向c库函数printf到USART1
int fputc(int ch, FILE *f)
{
                /* 发送一个字节数据到USART1 */
                USART_SendData(USART1, (uint8_t) ch);
               
                /* 等待发送完毕 */
                while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);               
       
                return (ch);
}

/// 重定向c库函数scanf到USART1
int fgetc(FILE *f)
{
                /* 等待串口1输入数据 */
                while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

                return (int)USART_ReceiveData(USART1);
}



回复

使用道具 举报

 楼主| 发表于 2016-11-4 15:40:41 | 显示全部楼层
大神们帮帮忙
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-4 17:04:18 | 显示全部楼层
我是直接把野火自带的串口程序写进去了,结果就不行,什么都没动,是板子坏掉了还是我的配置有问题呢
回复 支持 反对

使用道具 举报

发表于 2016-11-4 18:37:32 | 显示全部楼层
fput的标志检测使用TXE来试下,
类似下面的:
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-7 09:12:07 | 显示全部楼层
flyleaf 发表于 2016-11-4 18:37
fput的标志检测使用TXE来试下,
类似下面的:
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == R ...

还是不行……出来的还是乱码。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-7 11:22:59 | 显示全部楼层
flyleaf 发表于 2016-11-4 18:37
fput的标志检测使用TXE来试下,
类似下面的:
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == R ...

这种情况有没有可能是PC端串口设置有问题呢?
回复 支持 反对

使用道具 举报

发表于 2016-11-7 11:50:15 | 显示全部楼层
ldy1059046188 发表于 2016-11-7 11:22
这种情况有没有可能是PC端串口设置有问题呢?

一般不会,你可以换个串口调试助手来试下,或者换根线
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-7 15:27:44 | 显示全部楼层
flyleaf 发表于 2016-11-7 11:50
一般不会,你可以换个串口调试助手来试下,或者换根线

都试过了 还是不行 我是把资料里带的程序写进去了  也没做改动 发现不行,但是试了资料里带的触摸屏的程序没有问题,触摸屏能够正常工作,板子应该没问题,芯片应该也没有坏。不明白是哪里出了问题
回复 支持 反对

使用道具 举报

发表于 2016-11-7 16:43:08 | 显示全部楼层
ldy1059046188 发表于 2016-11-7 15:27
都试过了 还是不行 我是把资料里带的程序写进去了  也没做改动 发现不行,但是试了资料里带的触摸屏的程 ...

搞不定的话把板子寄回来检修下吧
再确认下直接用我们的例程来测试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-7 17:34:25 | 显示全部楼层
flyleaf 发表于 2016-11-7 16:43
搞不定的话把板子寄回来检修下吧
再确认下直接用我们的例程来测试

就是直接用的例程里的程序,没有改动,连接出来就这样了,如果寄回去联系淘宝吗
回复 支持 反对

使用道具 举报

发表于 2016-11-7 18:22:57 | 显示全部楼层
ldy1059046188 发表于 2016-11-7 17:34
就是直接用的例程里的程序,没有改动,连接出来就这样了,如果寄回去联系淘宝吗

是的,到这里联系客服:https://fire-stm32.taobao.com/
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-8 10:05:35 | 显示全部楼层
flyleaf 发表于 2016-11-7 18:22
是的,到这里联系客服:https://fire-stm32.taobao.com/

用例程里面触摸屏的程序是没有问题的,里面用的也是串口一,不能够排除板子的问题吗?
回复 支持 反对

使用道具 举报

发表于 2016-11-8 10:45:22 | 显示全部楼层
ldy1059046188 发表于 2016-11-8 10:05
用例程里面触摸屏的程序是没有问题的,里面用的也是串口一,不能够排除板子的问题吗?

触摸屏程序的串口输出正常不?

如果正常的话,你把串口驱动换到不正常的工程里
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 17:28 , Processed in 0.036520 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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