参考文件:STM32固件库使用手册的中文翻译版.pdf
如图1
我们先把USART初始化函数添加到主函数,如图二
包括Baudrate,Word Length,Stop Bit,Parity,Hardware Flow Control(硬件流控制),Usart Mode;UE使能,使能串口外设,如图3
3.串口初始化,串口外设使能之后,就要发送数据了如图4;
4.发送完成标志位函数,如图5;
程序1 实现功能代码如下
/************************************************
刘凯教你学STM32F103
第20讲
软件仿真,库函数实现USART数据发送
2016年4月24日 10:12:39
程序实现1
**************************************************/
#include "sys.h"
#include "delay.h"
void RCC_Configuration(void);
void GPIO_Configuration(void);
int main(void)
{
u8 i,data;
USART_InitTypeDef USART_InitStructure;
RCC_Configuration();
GPIO_Configuration();
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
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_Cmd(USART1,ENABLE);
data = 'A';
for(i=0;i<30;i++)
{
USART_SendData(USART1, data);
data++;
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
}
}
void RCC_Configuration(void)
{
/*---------------使用外部RC晶振----------*/
RCC_DeInit(); //设置时钟为缺省值
RCC_HSEConfig(RCC_HSE_ON); //使能外部高速晶振
while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);//等待HSE准备就绪
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能指令预取
FLASH_SetLatency(FLASH_Latency_2); //等待2个周期
RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 72MHZ
RCC_PLLCmd(ENABLE); //Enable PLLCLK
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait PLL is ready
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //SYSCLK = PLLCLK
while(RCC_GetSYSCLKSource()!= 0x08); //Wait PLLCLK as system clock
//---------打开相应外设时钟--------------------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能APB2外设的GPIOA的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //管脚频率为50MHZ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化GPIOA寄存器
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //选择
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化GPIOA寄存器
}
对上面代码进行优化
/************************************************
刘凯教你学STM32F103
第20讲
软件仿真,库函数实现USART数据发送
2016年4月24日 10:12:39
程序实现2 对程序1进行优化
**************************************************/
#include "sys.h"
#include "delay.h"
void RCC_Configuration(void);
void GPIO_Configuration(void);
void USART_Configuration(u32 Baudrate);
int main(void)
{
u8 i,data;
RCC_Configuration();
GPIO_Configuration();
USART_Configuration(9600);
data = 'A';
for(i=0;i<30;i++)
{
USART_SendData(USART1, data);
data++;
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
}
}
void RCC_Configuration(void)
{
/*---------------使用外部RC晶振----------*/
RCC_DeInit(); //设置时钟为缺省值
RCC_HSEConfig(RCC_HSE_ON); //使能外部高速晶振
while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);//等待HSE准备就绪
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能指令预取
FLASH_SetLatency(FLASH_Latency_2); //等待2个周期
RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 72MHZ
RCC_PLLCmd(ENABLE); //Enable PLLCLK
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait PLL is ready
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //SYSCLK = PLLCLK
while(RCC_GetSYSCLKSource()!= 0x08); //Wait PLLCLK as system clock
//---------打开相应外设时钟--------------------
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能APB2外设的GPIOA的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //管脚频率为50MHZ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化GPIOA寄存器
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //选择
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化GPIOA寄存器
}
void USART_Configuration(u32 Baudrate)
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = Baudrate;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
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_Cmd(USART1,ENABLE);
}
上一篇:stm32发送16进制的数组总结
下一篇:stm32使用两路串口及接收不定长数据的实现
推荐阅读
史海拾趣
Amperite Co. 是一家在电子行业中知名的公司,专注于生产和销售电子元件。以下是关于Amperite Co. 发展的五个相关故事:
成立与早期发展:Amperite Co. 成立于20世纪40年代初,总部位于美国纽约州。公司最初专注于生产和销售电子继电器和时间延迟器等元件,以满足当时快速发展的电子设备市场的需求。通过不断的技术创新和产品优化,Amperite Co. 在行业内建立了良好的声誉。
技术创新与产品多样化:随着电子行业的发展和技术的进步,Amperite Co. 不断进行技术创新,扩展产品线。除了传统的继电器和时间延迟器,公司还推出了一系列新型电子元件,包括光耦合器、固态继电器、传感器等。这些新产品的推出使得Amperite Co. 能够满足不同客户的需求,并保持竞争力。
质量控制与生产优化:Amperite Co. 始终把质量放在首位,实施严格的质量控制措施。公司采用先进的生产设备和工艺,确保产品质量稳定可靠。此外,Amperite Co. 不断优化生产流程,提高生产效率,降低生产成本,以提供更具竞争力的产品价格。
客户服务与合作伙伴关系:Amperite Co. 重视客户服务,并与客户建立了长期稳定的合作关系。公司为客户提供及时的技术支持和售后服务,满足客户的需求。此外,Amperite Co. 还与全球各种电子设备制造商建立了合作伙伴关系,共同推动技术创新和产品发展。
持续发展与市场拓展:Amperite Co. 不断追求发展和壮大,通过开拓新市场和拓展业务范围实现了持续增长。公司将目光投向国际市场,扩大产品销售网络,拓展海外客户群。同时,Amperite Co. 还积极参与行业展会和技术交流活动,加强品牌宣传,提升市场知名度。
这些故事展示了Amperite Co. 从成立初期到如今在技术创新、产品多样化、质量控制、客户服务与合作伙伴关系以及持续发展与市场拓展等方面取得的重要进展。
FINECHIPS公司始终坚持客户导向的经营理念,深入了解客户需求,提供定制化的产品和服务。在一次与某知名电子产品制造商的合作中,FINECHIPS根据客户的特殊需求,迅速调整产品设计和生产流程,成功开发出了一款符合客户要求的定制化芯片。这次合作不仅加深了双方的合作关系,还为FINECHIPS赢得了更多潜在客户的信任和青睐。
随着市场的不断扩大,Fullywell意识到需要进一步提升产能以满足客户需求。于是,公司在2010年启动了大规模的产能扩张计划,投资建设了一座现代化的晶圆制造厂。同时,公司也加大了对国际市场的开拓力度,与多家国际知名电子企业建立了战略合作关系。这些举措不仅显著提升了Fullywell的产能和产品质量,也使其在国际市场上的知名度大幅提升,进一步巩固了其在行业内的地位。
在激烈的市场竞争中,德尔创始终保持着对技术创新的追求。公司不断加大研发投入,引进高端人才和先进设备,积极探索新的技术路线和产品应用。通过多年的积累和创新,德尔创在电子元器件领域已经拥有了一批具有自主知识产权的核心技术,并在市场上取得了显著的优势。这些技术优势不仅提升了公司的竞争力,还为公司的未来发展奠定了坚实的基础。
在快速发展的过程中,安森德公司始终注重品牌建设和文化塑造。公司坚持以客户为中心的服务理念,不断提升产品质量和服务水平。同时,安森德还积极参与各类行业活动和公益事业,提升公司的社会形象和品牌价值。在内部管理方面,公司倡导创新、协作、担当的企业文化,为员工提供了一个良好的工作环境和发展平台。这些举措不仅增强了员工的归属感和凝聚力,也为公司的长远发展奠定了坚实的基础。
随着国内市场的日益饱和,明波通信开始将目光投向全球市场。公司先后在日本东京和江苏常州设立了子公司,通过技术合作和市场拓展,进一步巩固了公司在全球通信领域的地位。同时,明波通信也积极参与国际技术交流和合作,不断提升自身的技术水平和创新能力。这一系列的国际化战略举措,为明波通信的未来发展奠定了坚实的基础。
以上五个故事都是基于明波通信在电子行业中的发展历程和公开资料进行的概括性描述。虽然无法涵盖所有细节和具体事件,但希望能够展现出明波通信在创业、技术创新、市场拓展和国际化等方面的努力和成就。
什么是 802.11 802.11a 802.11b 802.11g 标准 802.11 802.11是IEEE最初制定的一个无线局域网标准,主要用于解决办公室局域网和校园网中用户与用户终端的无线接入,业务主要限于数据存取,速率最高只能达到2Mbps。由于它在速率和传输距离上都不能满足人们的需要,因此,IEEE小组又相继推 ...… 查看全部问答∨ |
|
在用multisim10仿真的时候,对于没有的器件该怎么办?比如我要仿真OP07的一个电路,但是我在multisim10里找不到OP07,那我该怎么办呢,可以创建一个吗?… 查看全部问答∨ |
我一个Wince终端的UDP通信,发送数据到一个服务器,服务器接收不到数据,如果用Wince终端自己做服务器,就可以接收到,不知道什么问题,我用USB线连到电脑联网通信可以吗,但是在WinCE终端上是ping不通的?… 查看全部问答∨ |
请问一下,当NAND进行读写操作的时候,由于是以页为单位,如果我操作的首地址并不是页首地址, 1:那应该如何操作?(例如一页有512Byte,操作首地址是第100字节)那我应该从100开始,一直读写 ...… 查看全部问答∨ |
|
以下是我的程序,编译连接能通过,也能生成hex文件,就是不能显示,不知道是什么问题。望高手求救! /**************************************************************************************file name &nb ...… 查看全部问答∨ |