本帖最后由 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原创,如需转载或用于商业用途需征得作者同意并注明出处