打印
[STM32F1]

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

[复制链接]
2036|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pangb|  楼主 | 2019-2-15 12:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用扫描枪扫描数据把数据发给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);
            }
        }
}
沙发
bqyj| | 2019-2-15 12:48 | 只看该作者

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

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

使用特权

评论回复
板凳
wenfen| | 2019-2-15 12:51 | 只看该作者

检查下串口配置,看下板子的引脚跳线是否正确。

使用特权

评论回复
地板
tian111| | 2019-2-15 12:53 | 只看该作者

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

使用特权

评论回复
5
chenho| | 2019-2-15 12:56 | 只看该作者

波特率,扫码枪的波特率是可以设置的

使用特权

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

使用特权

评论回复
7
chenho| | 2019-2-15 13:07 | 只看该作者
寄存器的看着多累啊

使用特权

评论回复
8
pangb|  楼主 | 2019-2-15 13:09 | 只看该作者
经检查是板子接了一个232芯片跳过之后可以接收。

使用特权

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

使用特权

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

使用特权

评论回复
11
pangb|  楼主 | 2019-2-15 13:19 | 只看该作者
tian111 发表于 2019-2-15 12:53
不使用标准库,也不使用HAL
直接用寄存器,牛人那你去查手册啊!

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

使用特权

评论回复
12
pangb|  楼主 | 2019-2-15 13:23 | 只看该作者
接手的时候用的就这 我现在只是修改。

使用特权

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

使用特权

评论回复
14
dingy| | 2019-2-15 13:30 | 只看该作者
不能进中断是条件不满足,或者中段没打开

使用特权

评论回复
15
pangb|  楼主 | 2019-2-15 13:35 | 只看该作者

唉,还是没有什么结果,算了,先结贴吧,多谢大家啦

使用特权

评论回复
16
wowu| | 2019-3-5 16:54 | 只看该作者
总线上有数据吗

使用特权

评论回复
17
xiaoqizi| | 2019-3-5 16:56 | 只看该作者
先看看数据发送出来了没有

使用特权

评论回复
18
木木guainv| | 2019-3-5 17:03 | 只看该作者
中断使能了吗

使用特权

评论回复
19
ch5320| | 2019-8-19 21:24 | 只看该作者
楼主你好,你把扫描枪设置在什么模式?我有霍尼韦尔1900扫描枪,用电脑能读取(因为安装了驱动),单片机要发送什么指令才能启动扫描枪?我现在连接单片机串口,按扫描枪按键没有反应。

使用特权

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

本版积分规则

701

主题

7643

帖子

6

粉丝