Welcome to Snooda's Blog
stm32之串口
[| 2011/12/02 00:53]
在最基本的GPIO使用熟练后,开始下一步:调试。
磨刀不误砍柴功。如果要写比较复杂的程序,调试是必需品。虽然jlink可以断点调试,但是效率低、查看变量值麻烦。程序比较大的时候相当复杂。对于普通程序,可以用日志的方式来进行调试,将日志打印到标准输出或者是文件,然后进行调试。在单片机开发中,可以通过串口通讯来完成这个事情,单片机将日志通过串口输出到开发机上,在开发机端使用串口工具进行查看。
首先是串口的概念,在网上搜索资料相当恼火,大部分都是直接就说串口怎么怎么用,如何如何好,要么就是直接大段代码。很蛋疼的是,到底啥是串口?单片机上哪个引脚是串口?
首先明确串口的概念,pc端串口分为25针和9针两种,9针为简化版,在台式机上一般都有,笔记本上已经绝迹了。
对于单片机来说,如果要串口通讯,最简单的方式其实是两根线:rx,tx。
一般要问了,为啥两根线就能干的活要9根甚至25根线呢?原来两根线只是最基本的串口通讯需要的。如果需要硬件流控等功能,还需要其他引脚的帮助。在这里简单起见,先使用最简单的。
由于笔记本没有串口,手头有两块usb转串口板,一块是pl2303的,非常便宜,10块钱。但功能也最简单,只有4根线,rx,tx,vcc,gnd,兼容性一般,需要安装驱动才能使用。还有一块基于ft232的,将近50块,功能也比较强大,支持9针插头,兼容性好,插上后可使用windows update自动搜索驱动并安装。
这次选用了p2303。
下一步,就是怎么连接的问题,板上密密麻麻近百个引脚,应该如何连接呢?这时需要查询datasheet。
stm32f103ze有5个串口通道。usart1最快。在这里我准备先拿2试试。datasheet上显示a2为tx,a3为rx。很快将线插好。vcc和gnd也接上。现在电路连通了(注意,插拔串口的时候需要断电操作,否则容易损坏串口)
然后就是编程。至于程序网络上就大把了。随便找个文档就是大堆。挑个有注释的看。大致流程如下:(最简单的,不带中断)
首先启用usart时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
然后是初始化gpio引脚:a3设置为GPIO_Mode_IN_FLOATING,a2设置为GPIO_Mode_AF_PP
然后是串口设置:
波特率9600,字长8,停止位1,不校验,硬件流控无,开启信息收发,启用串口。
然后就可以用USART_SendData发送数据了。
需要注意的地方:不要忘记开启时钟,这里要两次时钟操作,一次给串口,一次给io口,缺一不可。
磨刀不误砍柴功。如果要写比较复杂的程序,调试是必需品。虽然jlink可以断点调试,但是效率低、查看变量值麻烦。程序比较大的时候相当复杂。对于普通程序,可以用日志的方式来进行调试,将日志打印到标准输出或者是文件,然后进行调试。在单片机开发中,可以通过串口通讯来完成这个事情,单片机将日志通过串口输出到开发机上,在开发机端使用串口工具进行查看。
首先是串口的概念,在网上搜索资料相当恼火,大部分都是直接就说串口怎么怎么用,如何如何好,要么就是直接大段代码。很蛋疼的是,到底啥是串口?单片机上哪个引脚是串口?
首先明确串口的概念,pc端串口分为25针和9针两种,9针为简化版,在台式机上一般都有,笔记本上已经绝迹了。
对于单片机来说,如果要串口通讯,最简单的方式其实是两根线:rx,tx。
一般要问了,为啥两根线就能干的活要9根甚至25根线呢?原来两根线只是最基本的串口通讯需要的。如果需要硬件流控等功能,还需要其他引脚的帮助。在这里简单起见,先使用最简单的。
由于笔记本没有串口,手头有两块usb转串口板,一块是pl2303的,非常便宜,10块钱。但功能也最简单,只有4根线,rx,tx,vcc,gnd,兼容性一般,需要安装驱动才能使用。还有一块基于ft232的,将近50块,功能也比较强大,支持9针插头,兼容性好,插上后可使用windows update自动搜索驱动并安装。
这次选用了p2303。
下一步,就是怎么连接的问题,板上密密麻麻近百个引脚,应该如何连接呢?这时需要查询datasheet。
stm32f103ze有5个串口通道。usart1最快。在这里我准备先拿2试试。datasheet上显示a2为tx,a3为rx。很快将线插好。vcc和gnd也接上。现在电路连通了(注意,插拔串口的时候需要断电操作,否则容易损坏串口)
然后就是编程。至于程序网络上就大把了。随便找个文档就是大堆。挑个有注释的看。大致流程如下:(最简单的,不带中断)
首先启用usart时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
然后是初始化gpio引脚:a3设置为GPIO_Mode_IN_FLOATING,a2设置为GPIO_Mode_AF_PP
然后是串口设置:
引用
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART2 , &USART_InitStructure);
USART_Cmd(USART2, ENABLE);
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART2 , &USART_InitStructure);
USART_Cmd(USART2, ENABLE);
波特率9600,字长8,停止位1,不校验,硬件流控无,开启信息收发,启用串口。
然后就可以用USART_SendData发送数据了。
需要注意的地方:不要忘记开启时钟,这里要两次时钟操作,一次给串口,一次给io口,缺一不可。
入手stm32最小系统板
[| 2011/11/28 13:50]
之前在大学的时候弄过一段时间的嵌入式,后来因为小批量的制作电路板成本实在很高,后来没有继续搞了。最近看到有同事在用arduino,又激发了我的兴趣,准备搞一下。
调研了一下,发现arduino虽然ide看起来很好玩,但是性能和价格都不靠谱。性能是8位mcu,20mhz主频,2ksram,128-2048k flash,总体性能差了不少。并且由于现在在国内属于小众,价格也很不给力。
在调研的过程中发现了stm32,这是基于arm Cortex-M3内核的一个mcu,32位mcu,主频72mhz,应用的比较多,资料也不少,于是决定入手一个这个。
先是看了开发板,发现附带的外设过多,很乱,不喜欢,决定买个最小系统版,然后自己买别的扩展板来扩展。为了扩展性考虑选择了flash和sram容量都比较大的一款:stm32f103ze的最小系统板,512k flash,64k sram。足够跑一个比较复杂的程序了,咨询了一下嵌入式的同学,这个配置跑ucos之类的系统也是足够了。
除了买板,一些其他的配件也是必须的。jlink调试器、面包板、跳线、直插电阻、发光二级管,都买了一些。同时还买了红外感应模块、isp下载模块、光感应模块,用来练手。一共200出头,很便宜。
为了时效性考虑,卖家选的是北京的,不过查快递信息的时候发现貌似卖家在上地八街。。。。这么近,还不如自取呢。
周日晚上搞了一会,装了keil,jlink驱动等等,鼓捣了一下,发现比搞普通c程序麻烦不少,还要管时钟、中断之类的。不过很有意思,稍后会搞点有意思的东西出来。
调研了一下,发现arduino虽然ide看起来很好玩,但是性能和价格都不靠谱。性能是8位mcu,20mhz主频,2ksram,128-2048k flash,总体性能差了不少。并且由于现在在国内属于小众,价格也很不给力。
在调研的过程中发现了stm32,这是基于arm Cortex-M3内核的一个mcu,32位mcu,主频72mhz,应用的比较多,资料也不少,于是决定入手一个这个。
先是看了开发板,发现附带的外设过多,很乱,不喜欢,决定买个最小系统版,然后自己买别的扩展板来扩展。为了扩展性考虑选择了flash和sram容量都比较大的一款:stm32f103ze的最小系统板,512k flash,64k sram。足够跑一个比较复杂的程序了,咨询了一下嵌入式的同学,这个配置跑ucos之类的系统也是足够了。
除了买板,一些其他的配件也是必须的。jlink调试器、面包板、跳线、直插电阻、发光二级管,都买了一些。同时还买了红外感应模块、isp下载模块、光感应模块,用来练手。一共200出头,很便宜。
为了时效性考虑,卖家选的是北京的,不过查快递信息的时候发现貌似卖家在上地八街。。。。这么近,还不如自取呢。
周日晚上搞了一会,装了keil,jlink驱动等等,鼓捣了一下,发现比搞普通c程序麻烦不少,还要管时钟、中断之类的。不过很有意思,稍后会搞点有意思的东西出来。