嵌入式固件开发之五——直接操作STM32寄存器的UART测试程序(实现printf)和使用VSPD仿真
2019-02-10 17:19
344 查看
5 直接操作STM32寄存器的UART测试程序(实现printf)和仿真
5.1 串口代码
uart.h
[code]#ifndef USART_H #define USART_H void usart_init(void); void usart_send(int c); int usart_recv(void); #endif
uart.c
[code]#include <stdio.h> #include "stm32f10x.h" // Device header void usart_init(void) { // 使能APB2的GPIOA的时钟 RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // 使能APB2的USART的时钟 RCC->APB2ENR |= RCC_APB2ENR_USART1EN; // PA9和PA10配置为串口功能 GPIOA->CRH = (GPIOA->CRH & ~(0xF << 4)) | (0xB << 4); GPIOA->CRH = (GPIOA->CRH & ~(0xF << 8)) | (0x4 << 8); // 波特率9600 USART1->BRR = (468 << 4) | 12; // 使能串口,帧格式8-N-1 USART1->CR1 = 0x200C; // 清发送完成标志位 USART1->SR &= ~USART_SR_TC; } void usart_send(int c) { // 等待上一次发送完成 while (!(USART1->SR & USART_SR_TXE)); // 将发送数据写入寄存器 USART1->DR = c; // 等待发送完成 while (!(USART1->SR & USART_SR_TC)); } int usart_recv(void) { // 轮询等待接收 while (!(USART1->SR & USART_SR_RXNE)); // 返回收到的数据 return USART1->DR; } // C标准输入输出库stdio的底层支持函数,这样printf和scanf等就定向到了串口 // 在不同的终端下,对/r和/n要做一些特殊的处理,这里省略 int fputc(int c, FILE *stream) { usart_send(c); return c; } int fgetc(FILE *f) { return usart_recv(); }
main.c
[code]#include <stdio.h> #include "usart.h" int main(void) { usart_init(); printf("System initialized\r\n"); while (1) { putchar(getchar()); } }
5.2 安装虚拟串口软件
运行VSPD安装程序
用Crack目录下的文件替换安装目录下的文件。运行VSPD,创建虚拟串口对。
5.3 串口仿真
打开PuTTY,做如下设置。
保存设置方便以后使用。
这时VSPD显示COM1被PuTTY打开。
编译并运行串口测试程序,并启动调试,在MDK下方的命令行窗口中输入下面两行命令,表示打开COM2,将UART1和该COM口关联。
这时VSPD显示COM2被MDK打开。
运行程序,查看PuTTY的屏幕显示。在终端上输入字符,串口程序进行回显。
相关文章推荐
- 使用Map集合开发电话簿程序,以电话号码为key,姓名为value,实现电话号码的添加,查询和删除 操作
- 【嵌入式linux】(第六步):使用eclipse集成开发环境开发第一个嵌入式Linux程序,并测试LED驱动
- 嵌入式固件开发之六——调用库接口函数实现ADC和仿真
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-复杂业务的实现(商品入库)-附案例操作视频
- 【转贴】在Solaris中使用用户态程序直接访问I/O端口 - 上海嵌入式家园 贺工
- 第94讲, 使用Scala开发集群运行的Spark 实现在线黑名单过滤程序
- 使用UI Automation实现自动化测试--7.2 (模拟键盘复杂操作在自动化测试中的应用)
- 使用J2SE开发一个测试Xfire的webservice的简单程序
- 4.第三单元任务三实训:编写一个类ExceptionTest,在main方法中使用try-catch-finally语句结构实现:在try语句块中,编写两个数相除操作,相除的两个操作数要求程序运行时用
- PHP实现数独破解(可以直接测试使用)
- 嵌入式程序开发中一种实现state machine的方法
- 开发、测试java程序时,尽可能使用-server(win上)选项,其他平台使用类似选项,启用JIT优化...
- 使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和键盘对弹出框里候选词的操作【附源码和在线测试地址】
- PHP程序中使用PDO对象实现对数据库的增删改查操作(PHP+smarty)
- 安卓开发培训(3.2 使用SharedPreferences实现Android数据读写操作)
- 基于 Laravel 开发博客应用系列 —— 从测试开始(二):使用Gulp实现自动化测试
- iOS开发 - OC - 实现本地数据存储的几种方式二(直接使用sqlite)
- Android 软件开发 使用Eclipse Debug调试程序 以及Eclipse快捷键操作详解
- 画动画圆之使用 QT4.6/C#/MFC/DELPHI/VB/BCB 开发的程序性能测试报告
- 使用 Perl 脚本实现交互式命令行程序的管理与测试自动化