打印
[STM32F1]

STM32f1不能接收扫描枪发来的串口数据

[复制链接]
1759|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
749120145|  楼主 | 2017-10-13 08:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想要用扫描枪扫描数据把数据发给STM32F1,但是现在STM32芯片我用示波器能看到RX管脚有数据来,不能进入中断。不知道哪里出了问题,希望有熟悉的帮我看看下面是串口初始化程序:

void Usart1_init(uint32_t pclk,uint32_t bound)
{
        float temp;
        uint16_t mantissa,fraction;
/*---------------------------------------------*/
        temp = (float)(pclk*1000000)/(bound*16);
        mantissa  = temp;
        fraction  = (temp-mantissa)*16;
        mantissa<<= 4;
        mantissa += fraction;
/*---------------------------------------------*/
        RCC->APB2ENR  |=   1u<<14;
        RCC->APB2ENR|=1<<14;  //ʹÄÜ´®¿ÚʱÖÓ
        RCC->APB2RSTR |=   1u<<14;
        RCC->APB2RSTR &= ~(1u<<14);  
/*---------------------------------------------*/
        USART1->BRR  = mantissa;
        USART1->CR1  = 0x200c;
        USART1->CR2  = 0x00;
        USART1->CR3  = 0x00;
/*---------------------------------------------*/
        //USART1->CR1 |= 1u<<8;
        USART1->CR1 |= 1u<<5;
/*---------------------------------------------*/
        NVIC->IP[37]  =  0x70;
        NVIC->ISER[1] = (uint32_t)0x01<<5;
//        NVIC->ICER[1] = (uint32_t)0x01<<5;       
}


下面是中断程序:
void USART1_IRQHandler(void)
{
        volatile uint8_t revdata;
/*---------------------------------------------*/
        revdata = USART1->SR;
        revdata = USART1->DR;
        //USART1->SR = 0;
        if(USART1->SR&(1<<5))
        {
      if(SMQ_flag==1)
            {
          SMQReceive(revdata);
            }
            else
      {
                      YtReceive(revdata);
            }
        }
}

或者有什么思路给我提点一下,我之前没做过这个。都是修改别人的程序不知道从哪里着手
沙发
feelhyq| | 2017-10-13 09:16 | 只看该作者
  把这一句放在 USART1->CR1  = 0x200c;   NVIC->ISER[1] = (uint32_t)0x01<<5;的后面,然后加上一句

RCC->APB2ENR  |=   1u<<x; /* 开启你所用到的uart对应的GPIO port端口时钟 */

使用特权

评论回复
板凳
一路向北lm| | 2017-10-13 09:17 | 只看该作者
检查下串口配置,看下板子的引脚跳线是否正确。

使用特权

评论回复
地板
Ketose| | 2017-10-13 09:32 | 只看该作者
不使用标准库,也不使用HAL
直接用寄存器,牛人那你去查手册啊!

使用特权

评论回复
5
gujiamao12345| | 2017-10-13 10:07 | 只看该作者
波特率,扫码枪的波特率是可以设置的

使用特权

评论回复
6
643757107| | 2017-10-13 15:43 | 只看该作者
应该跟用串口一样吧,不需要什么特别的地方。

使用特权

评论回复
7
mmuuss586| | 2017-10-13 20:54 | 只看该作者

寄存器的看着多累啊

使用特权

评论回复
8
749120145|  楼主 | 2017-10-16 09:54 | 只看该作者
一路向北lm 发表于 2017-10-13 09:17
检查下串口配置,看下板子的引脚跳线是否正确。

谢谢回复。经检查是板子接了一个232芯片跳过之后可以接收。现在出现了一个问题是发出来的数据和接收的不一样,查资料说波特率不一致导致的从哪里能验证

使用特权

评论回复
9
749120145|  楼主 | 2017-10-16 09:55 | 只看该作者
feelhyq 发表于 2017-10-13 09:16
把这一句放在 USART1->CR1  = 0x200c;   NVIC->ISER[1] = (uint32_t)0x01

谢谢回复 现在能接收到数据了,不过发出来的数据和接收数据不一致。又卡这里了

使用特权

评论回复
10
749120145|  楼主 | 2017-10-16 09:56 | 只看该作者
Ketose 发表于 2017-10-13 09:32
不使用标准库,也不使用HAL
直接用寄存器,牛人那你去查手册啊!

额 这不是我写的 我是接手要修改

使用特权

评论回复
11
749120145|  楼主 | 2017-10-16 09:57 | 只看该作者
mmuuss586 发表于 2017-10-13 20:54
寄存器的看着多累啊

接手的时候用的就这 我现在只是修改。

使用特权

评论回复
12
feelhyq| | 2017-10-16 10:47 | 只看该作者
749120145 发表于 2017-10-16 09:55
谢谢回复 现在能接收到数据了,不过发出来的数据和接收数据不一致。又卡这里了 ...

那是波脾气量下波形,看看波特率对不对,输出的波形是不是你想要发出的字符,接收也是一样

使用特权

评论回复
13
Stannis| | 2017-10-16 15:01 | 只看该作者
不能进中断是条件不满足,或者中段没打开

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

46

帖子

1

粉丝