stm32f103核心板串口通信入门
- 一、 基于寄存器与基于固件库编程方式的差异
- 二、stm32串口通信
-
- 三、总结
一、 基于寄存器与基于固件库编程方式的差异
使用固件库,目前比较多的例程是使用固件库编写的。固件库编写方式,特点是简单易于理解,资料多。新手适合用这种方式入门。
使用寄存器,想要深入理解CortexM3内核或是需要为了获得更好的可移植性,学习寄存器编程会比较有帮助。但是从专业的角度上看,寄存器更贴近底层,对外设的工作原理和运行机理会有更深的理解。优点:①具体参数更直观 ②程序运行占用资源少。 缺点:①开发速度慢 ②程序可读性差 ③维护复杂。开库开发方式则正好弥补了寄存器开发的缺点。
二、stm32串口通信
1. 前期准备
硬件
stm32f103c8t6核心板
推荐使用stm32f103ve开发板,核心板操作较为困难,容易出现线路连接不良、连接失误等各种意外。同时,开发板可以从网上找到直接可用的资料代码,大大节省时间,提高效率。
ST-link接口
USB-TLL转换线
以及数量足够的杜邦线
软件
STlink驱动
可自行百度下载
USB转串口驱动、野火多功能调试助手
USB转串口驱动在这里 提取码:l5fi
野火多功能调试助手在这里 提取码:rysf
MDK Keil5
连接
- ST-Link 与核心板:选择st-link选择3.3v口,与核心板相对应连接
- USB-TTL与核心板:TXD接A10,RXD接A9
(注意!这里一定是反着接,容易犯错!) - ST-Link与USB-TTL分别接到电脑上
连接成功后如下图、
2.编写程序并烧录
设计程序
要求STM32系统给上位机(win10)连续发送“hello windows!”,当上位机给stm32发送“Stop,stm32”后,stm32停止发送。
代码如下:
stm32f10x_it.c
#include "stm32f10x_it.h"
#include "bsp_usart.h"
void NMI_Handler(void){}
void HardFault_Handler(void)
{
while (1) {}
}
void MemManage_Handler(void)
{
while (1){}
}
void BusFault_Handler(void)
{
while (1){}
}
void UsageFault_Handler(void)
{
while (1){}
}
void SVC_Handler(void){}
void DebugMon_Handler(void){}
void PendSV_Handler(void){}
void SysTick_Handler(void){}
int i=0;
uint8_t ucTemp[50];
void DEBUG_USART_IRQHandler(void)
{
if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET){
ucTemp[i] = USART_ReceiveData(USART1); }
if(ucTemp[i] == '!'){
if(ucTemp[i-1] == '2'&&ucTemp[i-2] == '3'&&ucTemp[i-3] == 'm'&&ucTemp[i-4] == 't'&&ucTemp[i-5] == 's'&&ucTemp[i-6] == ' ')
if(ucTemp[i-7] == 'p'&&ucTemp[i-8] == 'o'&&ucTemp[i-9] == 't'&&ucTemp[i-10] == 's'){
printf("收到!");
while(1);
}
}
i++;
}
main.c
#include "stm32f10x.h"
#include "bsp_usart.h"
void delay(uint32_t count)
{
while(count--);
}
int main(void)
{
USART_Config();
while(1)
{
printf("hello windows 10!\n");
delay(5000000);
}
}
具体工程及代码来源:野火官网
烧录程序
在Keil上进行如下操作
出现上图信息代表着我们写好的程序就成功的通过ST-Link烧录到板子上了,我们打开野火多功能助手看看
这时的stm32像一个遇见了失散多年的亲妈一样在疯狂对着windows10发送“hello windows 10!”,我们无情的发送“stop,stm32!”试试
果然老实了,串口通信成功!
三、总结
总体来说,stm32实现串口通信的基础操作还是很简单的,需要注意一下几点防止踩坑
- 准备一块好的板子。这里我就要再次推荐一下野火开发者,核心板做意外太多了,需要额外准备两个接口线,连接时也很容易出现错误,我就因为线接触不良苦恼一整个晚上
- 个人认为不同板子Keil的程序建立是一个难点,如果能用现成的程序和工程会省很多事,我这里参考的是野火上的各种资料,因为野火上对于stm32f103c8t6的资料较少,我综合了stm32f103mini开发板和stm32f103指南者开发板的资料,经过修改才最终建立一个完整可用的工程,因此在使用前请将对应工程准备好。(虽然都是stm32f103,但是也有不同的类型,不同板子之间的工程是不能互用的,比如霸道的板子是stm32f103ve,就无法直接使用到stm32f103c8上)。
- 当出现不知道什么原因无法正常进行的时候,可以使用简单的如led闪烁程序检测板子和各个接口是否正常,这个代码我是直接从百度上找的,自己不会写QAQ
研究板子还是很有趣的,当成功的那一刻的心情是无可比拟的,不过我还是要放弃核心板转移到开发板上了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)