<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Snooda]]></title> 
<link>http://www.snooda.com/index</link> 
<description><![CDATA[Snooda's Blog]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Snooda]]></copyright>
<item>
<link>http://www.snooda.com/read/</link>
<title><![CDATA[stm32之串口]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[嵌入式]]></category>
<pubDate>Thu, 01 Dec 2011 16:53:48 +0000</pubDate> 
<guid>http://www.snooda.com/read/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;在最基本的GPIO使用熟练后，开始下一步：调试。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;磨刀不误砍柴功。如果要写比较复杂的程序，调试是必需品。虽然jlink可以断点调试，但是效率低、查看变量值麻烦。程序比较大的时候相当复杂。对于普通程序，可以用日志的方式来进行调试，将日志打印到标准输出或者是文件，然后进行调试。在单片机开发中，可以通过串口通讯来完成这个事情，单片机将日志通过串口输出到开发机上，在开发机端使用串口工具进行查看。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;首先是串口的概念，在网上搜索资料相当恼火，大部分都是直接就说串口怎么怎么用，如何如何好，要么就是直接大段代码。很蛋疼的是，到底啥是串口？单片机上哪个引脚是串口？<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;首先明确串口的概念，pc端串口分为25针和9针两种，9针为简化版，在台式机上一般都有，笔记本上已经绝迹了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;对于单片机来说，如果要串口通讯，最简单的方式其实是两根线：rx，tx。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;一般要问了，为啥两根线就能干的活要9根甚至25根线呢？原来两根线只是最基本的串口通讯需要的。如果需要硬件流控等功能，还需要其他引脚的帮助。在这里简单起见，先使用最简单的。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;由于笔记本没有串口，手头有两块usb转串口板，一块是pl2303的，非常便宜，10块钱。但功能也最简单，只有4根线，rx，tx，vcc，gnd，兼容性一般，需要安装驱动才能使用。还有一块基于ft232的，将近50块，功能也比较强大，支持9针插头，兼容性好，插上后可使用windows update自动搜索驱动并安装。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;这次选用了p2303。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;下一步，就是怎么连接的问题，板上密密麻麻近百个引脚，应该如何连接呢？这时需要查询datasheet。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;stm32f103ze有5个串口通道。usart1最快。在这里我准备先拿2试试。datasheet上显示a2为tx，a3为rx。很快将线插好。vcc和gnd也接上。现在电路连通了（注意，插拔串口的时候需要断电操作，否则容易损坏串口）<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;然后就是编程。至于程序网络上就大把了。随便找个文档就是大堆。挑个有注释的看。大致流程如下：（最简单的，不带中断）<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;首先启用usart时钟：RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;然后是初始化gpio引脚：a3设置为GPIO_Mode_IN_FLOATING，a2设置为GPIO_Mode_AF_PP<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;然后是串口设置：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;<div class="quote"><div class="quote-title">引用</div><div class="quote-content">USART_InitTypeDef USART_InitStructure; <br/>USART_InitStructure.USART_BaudRate = 9600; <br/>USART_InitStructure.USART_WordLength = USART_WordLength_8b; <br/>USART_InitStructure.USART_StopBits = USART_StopBits_1; <br/>USART_InitStructure.USART_Parity = USART_Parity_No; <br/>USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; <br/>USART_InitStructure.USART_Mode = USART_Mode_Tx &#124; USART_Mode_Rx; <br/>USART_Init(USART2 , &USART_InitStructure); <br/>USART_Cmd(USART2, ENABLE);</div></div><br/><br/>&nbsp;&nbsp; 波特率9600，字长8，停止位1，不校验，硬件流控无，开启信息收发，启用串口。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;然后就可以用USART_SendData发送数据了。<br/><br/>需要注意的地方：不要忘记开启时钟，这里要两次时钟操作，一次给串口，一次给io口，缺一不可。<br/>Tags - <a href="http://www.snooda.com/tags/stm32/" rel="tag">stm32</a> , <a href="http://www.snooda.com/tags/%25E4%25B8%25B2%25E5%258F%25A3/" rel="tag">串口</a> , <a href="http://www.snooda.com/tags/usart/" rel="tag">usart</a> , <a href="http://www.snooda.com/tags/gpio/" rel="tag">gpio</a>
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/#blogcomment</link>
<title><![CDATA[[评论] stm32之串口]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.snooda.com/read/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>