STM32入门学习之USART(STM32F030F4P6基于CooCox IDE)

发布者:iota19最新更新时间:2018-07-09 来源: eefocus关键字:STM32  USART  STM32F030F4P6  CooCox  IDE 手机看文章 扫描二维码
随时随地手机看文章


#include "stm32f0xx.h"

#include "stm32_lib/inc/stm32f0xx_rcc.h"

#include "stm32_lib/inc/stm32f0xx_gpio.h"

#include "stm32_lib/inc/stm32f0xx_usart.h"

 

int main(void)

{

//1、使能时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

//特别注意:因为串口有使用GPIO,所以对应GPIO的时钟也要使能

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

//2、选择引脚

//TX有PA2和PA9可选,RX有PA3和PA10可选

//GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1);

//GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1);

GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);//为什么是AF1,而不是AF0呢?见下图,数据手册才是准确的

GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);

 

//3、引脚设置

GPIO_InitTypeDef PORT_UART1_TX;//定义TX脚,PORT_UART1_TX是自定义名称,可以任意

PORT_UART1_TX.GPIO_Pin=GPIO_Pin_9;//此参数根据上面选择的引脚来定

PORT_UART1_TX.GPIO_Speed=GPIO_Speed_10MHz;

PORT_UART1_TX.GPIO_Mode=GPIO_Mode_AF;

PORT_UART1_TX.GPIO_PuPd=GPIO_PuPd_NOPULL;

//IO初始化

//第一个参数是系统的GPIOA、GPIOB、GPIOC等

//第二个参数是&+上面自定义的名称PORT_UART1_TX

GPIO_Init(GPIOA,&PORT_UART1_TX);

 

GPIO_InitTypeDef PORT_UART1_RX;//定义RX脚

PORT_UART1_RX.GPIO_Pin=GPIO_Pin_10;//此参数根据上面选择的引脚来定

PORT_UART1_RX.GPIO_Speed=GPIO_Speed_10MHz;

PORT_UART1_RX.GPIO_Mode=GPIO_Mode_AF;

PORT_UART1_RX.GPIO_PuPd=GPIO_PuPd_NOPULL;

GPIO_Init(GPIOA,&PORT_UART1_RX);

 

//4、串口参数配置

USART_InitTypeDef MyUsart1;//这个MyUsart1是我自定义的,可以任意定义如XYZ123

MyUsart1.USART_BaudRate=115200;//设置波特率

MyUsart1.USART_WordLength=USART_WordLength_8b;//设置数据长度

MyUsart1.USART_Parity=USART_Parity_No;//设置奇偶校验

MyUsart1.USART_StopBits=USART_StopBits_1;//设置停止位

MyUsart1.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//设置流控制

MyUsart1.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;//设置模式

//初始化

//第一个参数是系统的USART1、USART2、USART3等

//第二个参数就是&+上面自定义的量MyUsart1

USART_Init(USART1,&MyUsart1);

 

//5、使能

USART_Cmd(USART1,ENABLE);

//6、接收和发送,通过查询标志位

while(1){

while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)!=1);//等待接收

USART_ClearFlag(USART1,USART_FLAG_RXNE);//清楚接收完成标志位

USART_SendData(USART1,USART_ReceiveData(USART1));//接收什么,发送什么

while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=1);//等待发送完成

USART_ClearFlag(USART1,USART_FLAG_TXE);//清楚发送完成标志位

}

}


关键字:STM32  USART  STM32F030F4P6  CooCox  IDE 引用地址:STM32入门学习之USART(STM32F030F4P6基于CooCox IDE)

上一篇:STM32入门学习之GPIO(STM32F030F4P6基于CooCox IDE)
下一篇:STM32入门学习之GPIO(STM32F030F4P6基于CooCox IDE)(一)

推荐阅读最新更新时间:2024-03-16 16:08

STM32 系统时钟和SysTick定时器
1.STM32的时钟系统 在STM32中,一共有5个时钟源,分别是HSI、HSE、LSI、LSE、PLL (1)HSI是高速内部时钟,RC振荡器,频率为8MHz; (2)HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围是4MHz – 16MHz; (3)LSI是低速内部时钟,RC振荡器,频率为40KHz; (4)LSE是低速外部时钟,接频率为32.768KHz的石英晶体; (5)PLL为锁相环倍频输出,严格的来说并不算一个独立的时钟源,PLL的输入可以接HSI/2、HSE或者HSE/2。倍频可选择为2 – 16倍,但是其输出频率最大不得超过72MHz。 其中,40kHz的LSI供独
[单片机]
STM32寄存器操作方式学习-通用定时/计数器之影子寄存器
在这幅图中细心的朋友可能会发现,有些寄存器的方框下面有阴影,这就是表示该寄存器有相应的影子寄存器。 这种寄存器表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器);正如手册上的14.3.1节所说,根据TIMx_CR1寄存器中APRE位的设置,preload register的内容可以随时传送到shadow register,即两者是连通的(permanently),或者在每一次更新事件(UEV)时才把preload register的内容传送到sha
[单片机]
<font color='red'>STM32</font>寄存器操作方式学习-通用定时/计数器之影子寄存器
STM32移植LWIP官方demo
本文使用的IDE是IAR7.2,考虑到很多很使用Keil,本文也有keil版本的说明 1、硬件说明 主控:STM32F207VCT6,100管脚的封装 网络PHY芯片:RTL8201EL,48管脚封装,34和35管脚下拉,也就是芯片地址:0 使用的网络接口:MII接口 2、移植步骤 2.1、修改IAR配置文件 修改芯片设置(其实不用修改) 硬件使用的是SWD模式 2.2、修改网络PHY地址 在stm32f2x7_eth_bsp.h文件中 2.3、修改硬件IO 在stm32f2x7_eth_bsp.c中 2.4、屏蔽无用的东西和修改IP 在main.h中 修改IP地址(以读者本机I
[单片机]
<font color='red'>STM32</font>移植LWIP官方demo
stm32位带操作,实现51类似的GPIO控制功能
新建一个system.h文件,包含以下内容 #ifndef _system_H #define _system_H #include stm32f10x.h //位带操作,实现51类似的GPIO控制功能 //具体实现思想,参考 CM3权威指南 第五章(87页~92页). //IO口操作宏定义 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF) 5)+(bitnum 2)) #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define BIT_ADDR(ad
[单片机]
STM32单片机是怎样执行中断函数中的应用的
在STM32单片机的编程当中,中断函数的名称都是xxx_IRQHandler格式的。那当编译程序的时候是怎么知道这是一个中断函数的呢? 每个中断都是有入口地址的。程序在执行过程中遇到中断的时候,会先判断这个中断的类型,根据类型再到中断向量表中查找,找到之后,根据表中指明的地址,程序就跳到该地址开始执行代码。 ST提供的固件库当中,有提供一个stm32f10x_it.c文件,打开之后会发现里面放的都是些空函数,但是名字都是“xxx_Handler()”格式,需要使用某个中断的时候,在代码中使能该中断,并到这个文件中将中断服务函数添加上,就可以了。 而这些名字就是一个个的中断函数入口地址。在启动代码中便有这些定义。如下图所示:
[单片机]
STM32学习之:SPI读写串行Flash
24.1 SPI协议简介 SPI协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在ADC、LCD等设备与MCU间,要求通讯速率较高的场合。 学习本章时,可与I2C章节对比阅读,体会两种通讯总线的差异以及EEPROM存储器与FLASH存储器的区别。下面我们分别对SPI协议的物理层及协议层进行讲解。 24.1.1 SPI物理层 SPI通讯设备之间的常用连接方式见图 241。 图 241 常见的SPI通讯系统 SPI通讯使用3条总线及片选线,3条总线分别为SCK、MOSI、MISO,片选线为,它们的作用介绍
[单片机]
<font color='red'>STM32</font>学习之:SPI读写串行Flash
stm32 Bootloader设计(YModem协议)
相信很多人都希望,不开盖就可以对固件进行升级吧,就像手机那些。下文中的bootload就来实现这样的功能。 前段时间有项目关于Bootload设计。所以就仔细的去了研究了一翻。以前都是用的stm32官方的,没有去深入了解。这次做完了过后,发现官方的版本存在一些问题。比如说YModem传送过程中,完全没有对数据区进行效验,只是核对了下编号,就进行烧写。整个程序完全为阻塞式,浪费了大量的cpu做无用功。当然这在升级程序方面也用不了多少时间。有一个重要的问题,官方代码只可以用超级终端进行传输。这样如果你用的是64位的win7,那就没有办法升级。因为只有xp或32位的win7才可以使用 超级终端。64位的win7下超级终端没办法使
[单片机]
<font color='red'>stm32</font> Bootloader设计(YModem协议)
On-Ramp 选用IAR Workbench集成开发环境
IAR Systems® 今日宣布On-Ramp Wireless 公司选用IAR Embedded Workbench® for TI MSP430集成开发环境来开发最新的Ultra-Link Processing™技术。 IAR Embedded Workbench将被集成到On-Ramp Ultra-Link Processing™ 无线网络系统开发包(SDK)中. IAR Embedded Workbench预先装载了On-Ramp SDK的源代码驱动,为用户提供了一种快速而可靠的平台,用于搭建On-Ramp网络和运行网络。 On-Ramp Ultra-Link Processing技术具有大容量,长
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved