历史上的今天
返回首页

历史上的今天

今天是:2024年12月17日(星期二)

正在发生

2018年12月17日 | stm32f103 USART串口简单实现

2018-12-17 来源:eefocus

(基于奋斗stm32_v5开发板)


1、创建工程并编写C程序


#include"stm32f10x.h"

#include"stdarg.h"

 

void USART1_Config()

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;


/* 使能USART1的时钟 */

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA , ENABLE);


/*配置USART1 TX,并设置为复用推挽输出模式*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);


/*配置USART1 RX,并设置为浮空输入模式*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);


/*配置USART1模式*/

USART_InitStructure.USART_BaudRate = 57600;                               //波特率设置为57600//

USART_InitStructure.USART_WordLength = USART_WordLength_8b;               //配置串口传输的字长8位//

USART_InitStructure.USART_StopBits = USART_StopBits_1;                    //配置停止位为1//

USART_InitStructure.USART_Parity = USART_Parity_No;                       //不设置奇偶校验位//

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //不采用硬件流//

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //配置串口为双线全双工通信,将RX、Tx模式都开启//

USART_Init(USART1, &USART_InitStructure); //向寄存器写入配置参数//

USART_Cmd(USART1, ENABLE); //使能USART1外设// 

}

 

static char *itoa(int value, char *string, int radix)

{

int i, d;

int flag = 0;

char *ptr = string;


/*此实现只适用于十进制数*/

if(radix != 10)

{

*ptr = 0;

return string;

  }


if(!value)

{

*ptr++ = 0x30;

*ptr = 0;

return string;

}


/*如果这是负值,则插入减号*/

if(value < 0)

{

*ptr++ = '-';

value *= -1;

}

for(i = 10000; i > 0; i /= 10)

{

d = value / i;

if (d || flag)

{

*ptr++ = (char)(d + 0x30);

value -= (d * i);

flag = 1;

}

}


/*NULL终止字符串*/

*ptr = 0;

return string;

}

 

void USART1_printf(USART_TypeDef* USARTx, uint8_t *Data,...)

{

const char *s;

int d;

char buf[16];

va_list ap;

va_start(ap, Data);

while (*Data != 0)                                    //判断是否到达字符串结束符//

{

if(*Data == 0x5c)                                   //'\'//

{

switch( *++Data )

{

case 'r':                                       //回车符//

USART_SendData(USARTx, 0x0d);

Data ++;

break;


case 'n':                                       //换行符//

USART_SendData(USARTx, 0x0a);

Data ++;

break;


default:

Data ++;

break;

}

}

else if (*Data == '%')

{

switch (*++Data)

{

case 's':                                        //字符串//

s = va_arg(ap, const char *);

for(;*s; s++)

{

USART_SendData(USARTx, *s);

while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET );

}

Data++;

break;


case 'd':                                       //十进制//

d = va_arg(ap, int);

itoa(d, buf , 10);

for(s = buf;*s;s++)

{

USART_SendData(USARTx, *s);

while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET );

}

Data++;

break;


default:

Data++;

break;

}

}

else USART_SendData(USARTx, *Data++);

while( USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET );

}

}

 

int main(void)

{

/*初始化串口*/

USART1_Config();


USART1_printf(USART1,"\r\nHello Word\r\n");


while(1);

}


2、连接J-Link,编译,将程序下载进stm32开发板


3、连接串口,打开串口调试助手进行调试



看到打印Hello World,目标完成

推荐阅读

史海拾趣

HI Microwave Technology Limited公司的发展小趣事

HI Microwave Technology Limited自2004年在中国成立以来,便以“Hertz Infinite”(赫兹无限)为愿景,致力于将产品范围扩展至30 KHz至110 GHz+(针对GaAs、HEMT、PHEMT和MMIC基产品)以及220 GHz+(针对毫米波产品和子系统)。这一宏伟愿景不仅为公司指明了发展方向,也激励着每一位员工不断追求技术创新和产品卓越。在初创阶段,HI Microwave通过引进国际先进的生产设备和技术人才,迅速在微波通信领域站稳脚跟。

BOSER公司的发展小趣事

在国内市场取得一定成绩后,BOSER公司开始积极寻求海外市场的扩张。公司加强与国际知名企业的合作,通过参加国际展览、举办技术研讨会等方式,不断提升品牌知名度和影响力。同时,BOSER还针对不同国家和地区的市场需求,推出定制化的产品和服务,成功打开了多个海外市场。

佰宏(BHFUSE)公司的发展小趣事

佰宏公司始终坚持开放合作的理念,与多家知名企业建立了战略合作伙伴关系。例如,与立讯精密、奋达科技等实力企业的合作,不仅为佰宏带来了更多的业务机会,也进一步提升了公司的品牌影响力和市场地位。这些合作不仅带来了经济效益,更为佰宏的长远发展奠定了坚实的基础。

Hengstler GmbH公司的发展小趣事

BHFUSE佰宏实业成立于2013年,创立之初,公司便确立了专注于大电流、高电压、低内阻的PPTC自恢复保险丝的研发与生产。面对激烈的市场竞争,佰宏团队凭借对技术的深刻理解和对市场的敏锐洞察,逐步赢得了客户的认可。在创立初期,佰宏便与多家知名代工厂建立了合作关系,为其提供优质的保护器件,逐步在行业中树立了良好的口碑。

普芯达电子(Chipswinner)公司的发展小趣事

普芯达电子的“中国风”系列产品是公司发展历程中的一个重要里程碑。该系列产品经过严格的质量控制和品质检测,以其优异的性能和可靠的品质赢得了市场的广泛认可。通过一系列的市场推广活动,“中国风”品牌逐渐深入人心,成为国产集成电路产品的代表之一。同时,普芯达电子还通过不断创新和优化产品,满足了客户日益增长的需求,进一步巩固了市场地位。

Barkston Plastics Engineering Ltd.公司的发展小趣事

随着环保意识的日益增强,Barkston Plastics Engineering Ltd.积极响应行业趋势,致力于研发和生产环保型塑料电子元件。公司投入大量资源研发可降解和可回收的塑料材料,并将其应用于产品中。这一举措不仅赢得了客户的认可,也提升了公司的品牌形象,使其在竞争激烈的电子行业中脱颖而出。

问答坊 | AI 解惑

无法上传附件!

为什么今天无法上传附件,根本就没有这个选项啊? 难道是ie问题,或者论坛受到攻击?…

查看全部问答>

【EEWORLD】“简简单单DSP”系列学习活动(11月07日已更新第七期)

【EEWORLD】“简简单单DSP”系列学习活动 欢迎加入“简简单单DSP”系列学习活动,AQUA学习小组将和您一起学DSP281x。 活动目的:     数字信号处理器(DSP)是广大电子工程师几乎必备的利器,从运动控制到图像处理的诸多领域,DSP已 ...…

查看全部问答>

模电设计不得不看——模拟电路设计原则

主要内容: 衡量设计质量的标准 常用模拟电路设计方法 电磁兼容和认证 PCB布局布线技巧等…

查看全部问答>

这个稳压电路为什么不能稳压?

XMM2为6.155mV,XMM1为7.395mV. 请指教! …

查看全部问答>

手机PCB可靠性的设计方案1

手机功能的增加对PCB板的设计要求日益曾高,伴随着一轮蓝牙设备、蜂窝电话和3G时代来临,使得工程师越来越关注RF电路的设计技巧。 射频(RF)电路板设计由于在理论上还有很多不确定性,因此常被形容为一种“黑色艺术”,但这个观点只有部分正确,RF电 ...…

查看全部问答>

光强传感器TSL2561读出的数据总是为0

ARM92440芯片IIC接口,驱动光强传感器TSL2561。 根据TSL2561手册中的描述,The TIMING register defaults to 02h at power on,现在我的代码可以读出这个02h;读ID Register (Ah),也能读到正确的值。 用示波器观察,能很清楚地观察到START、STOP ...…

查看全部问答>

CE6.0下的Cellcore是不是已经帮我们实现了GSM协议栈?很多公司找人去设计GSM协议栈是什么意思?

CE6.0下的Cellcore是不是已经帮我们实现了GSM协议栈?很多公司找人去设计GSM协议栈是什么意思?…

查看全部问答>

TI送的8962板子上用计时器中断实现LED闪烁

想要在TI送的8962板子上用计时器中断实现LED闪烁,代码是网上找的,但是下载到板子后没有实现功能,我看不出问题,请大家指教 #include \"hw_ints.h\" #include \"hw_memmap.h\" #include \"hw_types.h\" #include \"debug.h\" #include \"gpi ...…

查看全部问答>

关于inux防火墙的资料

最近看了一下linux下面的防火墙的实现过程有些资料上传与大家分享Linux安全体系的防火墙实现linuxnetfilter&iptables实现机制的分析与应用 [ 本帖最后由 daicheng 于 2010-12-20 14:35 编辑 ]…

查看全部问答>

集成PHY,开放外部总线,ST会做吗?

能做到的话,就太完美了,不知ST有没有这个想法 LM3S9000系列就是这种应用方案,看来LM还是走在前面呀 ST 不出的话,看来只得转用 LM了,呵呵…

查看全部问答>