OpenEdv-开源电子网

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

解决usart2乱码的问题

[复制链接]

6

主题

82

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2013-12-6
在线时间
46 小时
发表于 2014-7-9 12:27:17 | 显示全部楼层 |阅读模式
想利用开发板里面的RS232,就必须对USART2进行初始化,PA3和PA2的跳线帽必须跳好,根据原子的USART1的代码修改后,发现接收乱码:
[mw_shl_code=c,true]初始化函数:[/mw_shl_code] [mw_shl_code=c,true]void uart2_init(u32 pclk2, 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; //使能串口时钟 GPIOA->CRL&=0XFFFF00FF;//IO状态设置 GPIOA->CRL|=0X00008B00;//IO状态设置 RCC->APB1RSTR|=1<<17; //复位串口2 RCC->APB1RSTR&=~(1<<17);//停止复位 //波特率设置 USART2->BRR=mantissa; // 波特率设置 USART2->CR1|=0X200C; //1位停止,无校验位. }[/mw_shl_code]
[mw_shl_code=c,true]发送函数:[/mw_shl_code] [mw_shl_code=c,true]void uart2_putc(u8 data) { while((USART2->SR&0X40)==0);//循环发送,直到发送完毕 USART2->DR = (u8)data; return; }[/mw_shl_code]
[mw_shl_code=c,true]
[mw_shl_code=c,true]主函数里面添加:[/mw_shl_code] [mw_shl_code=c,true]int main(void) { Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 uart_init(72,115200); LED_Init(); //初始化与LED连接的硬件接 uart2_init(72,115200); //usart2初始化 uart2_putc(0x10); //usart2发送一个数 OSInit(); OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务 OSStart(); }[/mw_shl_code]


[/mw_shl_code]
烧进开发板后,通过串口接收显示为乱码:


最后发现是弄错了usart1与usart2的时钟源,usart1的时钟源是APB2,usart1的时钟源是APB1,APB2最大为72MHz,APB1最大为36MHz。



    我们在看看原子的时钟初始化函数:



所以usart2里面的时钟应该是36MHz修改主函数代码:
[mw_shl_code=c,true]int main(void) { Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 uart_init(72,115200); LED_Init(); //初始化与LED连接的硬件接 ////////////////////////////////重点 uart2_init(36,115200); //usart2初始化,第一个参数是36,不是72 uart2_putc(0x10); //usart2发送一个数 OSInit(); OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务 OSStart(); }[/mw_shl_code]
烧到开发板结果:


问题解决。
有人问我会什么?我低头看看我手里的书,我发现我只会用。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-7-9 13:13:20 | 显示全部楼层
多谢分享。。。。。。
开往春天的手扶拖拉机
回复 支持 反对

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2014-7-9 14:44:14 | 显示全部楼层
不错不错,能总结经验,挺好
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-9 21:03:19 | 显示全部楼层
谢谢分享...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-6-8
在线时间
0 小时
发表于 2015-6-8 10:20:46 | 显示全部楼层
十分感谢 不知道能不能解决我的问题
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2013-12-2
在线时间
8 小时
发表于 2015-7-23 10:40:09 | 显示全部楼层
库函数版如何解决
今天是昨天的明天
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-7-23 15:17:28 | 显示全部楼层
楼主善于总结,乐于分享,向楼主学习
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2015-7-21
在线时间
11 小时
发表于 2015-8-17 14:07:19 | 显示全部楼层
谢谢楼主,找了好久,终于解决串口2的乱码问题了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 07:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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