打印
[STM32F1]

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

[复制链接]
1204|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pangb|  楼主 | 2021-7-4 19:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用扫描枪扫描数据把数据发给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);
            }
        }
}

使用特权

评论回复
沙发
zwll| | 2021-7-4 19:09 | 只看该作者

  把这一句放在 USART1->CR1  = 0x200c;   NVIC->ISER[1] = (uint32_t)0x01<<5;的后面,然后加上一句

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

使用特权

评论回复
板凳
chenjunt| | 2021-7-4 19:11 | 只看该作者
检查下串口配置,看下板子的引脚跳线是否正确。

使用特权

评论回复
地板
dingy| | 2021-7-4 19:13 | 只看该作者

不使用标准库,也不使用HAL
直接用寄存器,牛人那你去查手册啊!

使用特权

评论回复
5
heweibig| | 2021-7-4 19:16 | 只看该作者
波特率,扫码枪的波特率是可以设置的

使用特权

评论回复
6
chenho| | 2021-7-4 19:18 | 只看该作者
应该跟用串口一样吧,不需要什么特别的地方。

使用特权

评论回复
7
午夜粪车| | 2021-7-4 19:19 | 只看该作者

寄存器的看着多累啊

使用特权

评论回复
8
pangb|  楼主 | 2021-7-4 19:21 | 只看该作者
经检查是板子接了一个232芯片跳过之后可以接收。

使用特权

评论回复
9
pangb|  楼主 | 2021-7-4 19:23 | 只看该作者
现在出现了一个问题是发出来的数据和接收的不一样,查资料说波特率不一致导致的从哪里能验证

使用特权

评论回复
10
pangb|  楼主 | 2021-7-4 19:25 | 只看该作者
谢谢回复 现在能接收到数据了,不过发出来的数据和接收数据不一致。又卡这里了

使用特权

评论回复
11
renyaq| | 2021-7-4 19:27 | 只看该作者
额 这不是我写的 我是接手要修改

使用特权

评论回复
12
pangb|  楼主 | 2021-7-4 19:28 | 只看该作者
接手的时候用的就这 我现在只是修改。

使用特权

评论回复
13
stly| | 2021-7-4 19:29 | 只看该作者
那是波脾气量下波形,看看波特率对不对,输出的波形是不是你想要发出的字符,接收也是一样

使用特权

评论回复
14
lizye| | 2021-7-4 19:29 | 只看该作者
不能进中断是条件不满足,或者中段没打开

使用特权

评论回复
15
spark周| | 2021-7-4 19:30 | 只看该作者
总线上有数据吗

使用特权

评论回复
16
zhaoxqi| | 2021-7-4 19:31 | 只看该作者
先看看数据发送出来了没有

使用特权

评论回复
17
huangchui| | 2021-7-4 19:32 | 只看该作者
中断使能了吗

使用特权

评论回复
18
jiajs| | 2021-7-4 19:40 | 只看该作者
你把扫描枪设置在什么模式?

使用特权

评论回复
19
jiajs| | 2021-7-4 19:41 | 只看该作者
我有霍尼韦尔1900扫描枪,用电脑能读取(因为安装了驱动),单片机要发送什么指令才能启动扫描枪?

使用特权

评论回复
20
jiajs| | 2021-7-4 19:42 | 只看该作者
我现在连接单片机串口,按扫描枪按键没有反应。

使用特权

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

本版积分规则

701

主题

7643

帖子

6

粉丝