5104|2

226

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【ufun学习】篇四:串口打印输出 [复制链接]

本帖最后由 yin_wu_qing 于 2019-7-28 15:02 编辑

     大家周末愉快,玩玩UFUN开发板,丰富一下自己的业余时间,感觉挺充实的。今天我看了看关于串口打印信息输出的资料,从UFUN包中的原理图可以得知接口连接如下:

     同样的采用前面帖子所烧录的方式,由于40pin的接口间距太小,而我使用的JLink是采用标准的杜邦线转接,因此在keil中在线下载调试时,需要左手按住插在J1接口上的杜邦线,右手点击鼠标。下载完成后再撤掉JLink,拔掉39脚与40脚跳线帽,然后按K1按钮重启。此次在demo的示例上做了些补充,将串口打印的波特率设置成115200,输出图形由原来的“hello world”改成了“hello eeworld”,烧录时的连接如下图所示:

烧录好后,电脑端打开串口调试助手,选择好对应的虚拟串口号,波特率设置115200,实物连接如下:

部分代码如下:

#include "USART.h"

void USART_Config()
{
	GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
	//使能GPIOA和USART1时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);
	//TX配置
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;              													 
    //引脚定义
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                               
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    			                       
    //复用推挽输出
	GPIO_Init(GPIOA, &GPIO_InitStructure);           //初始化
	//RX配置                                                                        
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;       //引脚定义
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    //上拉输入
	GPIO_Init(GPIOA, &GPIO_InitStructure);           //初始化
    //波特率设置:115200                                                                             
	USART_InitStructure.USART_BaudRate = 115200; 																			
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;       //数据位设置:8
	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(USART1, &USART_InitStructure);                                                                                                                   
	USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);                     //USART1接收中断
    //USART1串口外设使能                    
	USART_Cmd(USART1, ENABLE);																											
}

void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)													//发送一个字节
{                                                                                 
	/* 发送一个字节数据到 USART */                                                  
	USART_SendData(pUSARTx,ch);                                                     
                                                                                  
	/* 等待发送数据寄存器为空 */                                                    
	while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);                  
}                                                                                 
                                                                                  
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)       //发送字符串
{
	unsigned int k=0;
	do 
	{
		Usart_SendByte( pUSARTx, *(str + k) );
		k++;
	} while (*(str + k)!='\0');

	/* 等待发送完成 */
	while (USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET) ;
}
#include "stm32f10x.h"
#include "stdio.h"
#include "main.h"
#include "stdlib.h"
#include "DELAY.h"
#include "USART.h"
#include "NVIC.h"
#include "stm32f10x_it.h"

int main()
{
	extern uint8_t ucTemp;			
	uint8_t send_flag=0;    //发送标志位
	USART_Config();			//串口配置
	NVIC_Config();			//中断配置

	while(1)
	{
		switch(ucTemp)		//根据接收的指令决定是否开始串口发送
		{
			case 0x10:			//接收到0x10时开始发送
				send_flag=1;
			break;
			case 0x11:			//接收到0x11时关闭发送
				send_flag=0;
			break;
		}
		if(send_flag==1)
		{
			Delay_Ms(1000);			
			Usart_SendString(USART1," _       _ _                          	   _    _      \r\n");
			Usart_SendString(USART1,"| |_ ___| | |___    ___ ___ __ ___ __| _ | |__| |		\r\n");
			Usart_SendString(USART1,"|   | -_| | | . |  | -_| -_| | | | . |  _| | .| |		\r\n");  
			Usart_SendString(USART1,"|_|_|___|_|_|___|  |___|___|_____|___|_/ |_|__|_|		\r\n");  
		}
	}                                       	
}

     打印输出的效果图示如下:


     另外我也尝试使用GPIOB10、GPIOB11的接口去执行串口打印,在程序中修改配置代码,下载程序完成后,使用外部的串口调试工具,在电脑上的串口调试助手上选择所对应的外部串口号,同样的也是可以实现串口打印输出的,但是苦于杜邦线的接口大小与J1的针间隙不匹配,因此需要手按住杜邦线,才能稳定打印输出信息。实际上没必要占用J1的管脚资源,用USB方式就能满足实时调试打印信息的需求。此次分享就到这儿,后续再深究扩展UFUN的其它特色功能。

 

此内容由EEWORLD论坛网友yin_wu_qing原创,如需转载或用于商业用途需征得作者同意并注明出处

此帖出自单片机论坛

最新回复

为什么我移植串口程序的时候,总是乱码,但是用原来的例程烧写进去又没事了呢? 我的总线时钟没配置明白吗? 我看代码里面也没有配置总线时钟的语句呀   详情 回复 发表于 2020-3-6 22:26
点赞 关注
 

回复
举报

373

帖子

0

TA的资源

纯净的硅(初级)

沙发
 

为什么我移植串口程序的时候,总是乱码,但是用原来的例程烧写进去又没事了呢?

我的总线时钟没配置明白吗?

我看代码里面也没有配置总线时钟的语句呀

此帖出自单片机论坛

点评

设置的波特率一致吗?连接的接口有没有接地线屏蔽信号干扰呀  详情 回复 发表于 2020-3-7 09:10
 
个人签名很高兴认识大家,请多关照
 

回复

226

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
desk1983 发表于 2020-3-6 22:26 为什么我移植串口程序的时候,总是乱码,但是用原来的例程烧写进去又没事了呢? 我的总线时钟没配置明白 ...

设置的波特率一致吗?连接的接口有没有接地线屏蔽信号干扰呀

此帖出自单片机论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表