OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2725|回复: 7

串口3用寄存器初始化后不能使用会卡死?

[复制链接]

3

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-2-27
在线时间
12 小时
发表于 2019-2-27 18:01:05 | 显示全部楼层 |阅读模式
6金钱
本帖最后由 鹤斌 于 2019-2-28 14:10 编辑

由官方程序修改而来改用串口2没问题,串口2代码如下
void uart2_init(u32 pclk1,u32 bound)
{           
        float temp;
        u16 mantissa;
        u16 fraction;           
        temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV
        mantissa=temp;                                 //得到整数部分
        fraction=(temp-mantissa)*16; //得到小数部分         
    mantissa<<=4;
        mantissa+=fraction;
        RCC->APB2ENR|=1<<2;   //使能PORTA口时钟  
        RCC->APB1ENR|=1<<17;  //使能串口2时钟
        GPIOA->CRL&=0XFFFF00FF;
        GPIOA->CRL|=0X00008B00;//IO状态设置
                  
        RCC->APB1RSTR|=1<<17;   //复位串口1
        RCC->APB1RSTR&=~(1<<17);//停止复位                     
        //波特率设置
         USART2->BRR=mantissa; // 波特率设置         
        USART2->CR1|=0X200C;  //1位停止,无校验位.
        //使能接收中断
        USART2->CR1|=1<<8;    //PE中断使能
        USART2->CR1|=1<<5;    //接收缓冲区非空中断使能                    
        MY_NVIC_Init(3,3,USART2_IRQChannel,2);//组2,最低优先级
}


但改成串口3就不行了,初始化通过了,但在发送数据的时候会卡死在while((USART3->SR&0X40)==0);这一句上。
感觉还是初始化过程出错了。但检查了很多遍都没找到问题。串口3初始化的代码如下


void uart3_init(u32 pclk1,u32 bound)
{           
        float temp;
        u16 mantissa;
        u16 fraction;           
        temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV
        mantissa=temp;                                 //得到整数部分
        fraction=(temp-mantissa)*16; //得到小数部分         
    mantissa<<=4;
        mantissa+=fraction;
        RCC->APB2ENR|=1<<3;   //使能PORTB口时钟  
        RCC->APB1ENR|=1<<18;  //使能串口3时钟
        GPIOB->CRH&=0XFFFF00FF;
        GPIOB->CRH|=0X00008B00;//IO状态设置
                  
        RCC->APB1RSTR|=1<<18;   //复位串口3
        RCC->APB1RSTR&=~(1<<18);//停止复位                     
        //波特率设置
         USART3->BRR=mantissa; // 波特率设置         
        USART3->CR1|=0X200C;  //1位停止,无校验位.
        //使能接收中断
        USART3->CR1|=1<<8;    //PE中断使能
        USART3->CR1|=1<<5;    //接收缓冲区非空中断使能                    
        MY_NVIC_Init(3,3,USART3_IRQChannel,2);//组2,最低优先级
}
补充:用jlink调试,在USART2_IRQHandler、USART1_IRQHandler、USART3_IRQHandler下中断,分别用串口助手发送数据来触发接收终端,发现串口3的中断无法触发,所以应该还是串口3初始化时候哪里有错误。




最佳答案

查看完整内容[请看2#楼]

因为用到了pclk,时钟为36M uart_init(36,115200); 我修改过后可以正常接收
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4307
金钱
4307
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-2-27 18:01:06 | 显示全部楼层
因为用到了pclk,时钟为36M
uart_init(36,115200);
我修改过后可以正常接收

串口3寄存器版本.zip

816.59 KB, 下载次数: 28

业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4307
金钱
4307
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-2-27 20:34:33 | 显示全部楼层
帮顶!
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-2-27
在线时间
12 小时
 楼主| 发表于 2019-2-28 13:23:05 | 显示全部楼层
@正点原子 原子哥呢,能不能帮忙看一下
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-2-27
在线时间
12 小时
 楼主| 发表于 2019-3-1 14:59:28 | 显示全部楼层
1208 发表于 2019-2-27 18:01
因为用到了pclk,时钟为36M
uart_init(36,115200);
我修改过后可以正常接收

谢谢,我一会就测试一下
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-2-27
在线时间
12 小时
 楼主| 发表于 2019-3-4 18:33:30 | 显示全部楼层
1208 发表于 2019-2-27 18:01
因为用到了pclk,时钟为36M
uart_init(36,115200);
我修改过后可以正常接收

问题解决了,不是我的问题,程序这么改没有错,是因为mini板找不到了,就去淘宝上找了个店铺4.88一个最小板,拿最小板测试的,结果那个最小板卖家说明和芯片上丝印都是STM32F103C8T6,但写了好几个测试程序测试,实际上应该是C6系列,flash只有32k,RAM也只有10k,串口个数只有2个。估计应该是卖家的供应商那边以次充好为了压低价格而改芯片丝印冒充C8系列。
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4307
金钱
4307
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-3-4 20:21:03 | 显示全部楼层
鹤斌 发表于 2019-3-4 18:33
问题解决了,不是我的问题,程序这么改没有错,是因为mini板找不到了,就去淘宝上找了个店铺4.88一个最小 ...

难怪,我看你程序写得也是挺好的,不应该有问题才对。
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2019-2-27
在线时间
12 小时
 楼主| 发表于 2019-4-4 14:48:58 | 显示全部楼层
1208 发表于 2019-3-4 20:21
难怪,我看你程序写得也是挺好的,不应该有问题才对。

奸商害人啊!
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 05:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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