历史上的今天
返回首页

历史上的今天

今天是:2025年07月10日(星期四)

正在发生

2018年07月10日 | STM32入门学习之USART中断(STM32F030F4P6基于CooCox IDE)

2018-07-10 来源:eefocus


#include "stm32f0xx.h"

#include "stm32_lib/inc/stm32f0xx_rcc.h"

#include "stm32_lib/inc/stm32f0xx_gpio.h"

#include "stm32_lib/inc/stm32f0xx_usart.h"

#include "stm32_lib/inc/stm32f0xx_misc.h"

 

#include "delay.h"

 

int main(void)

{

//1、使能时钟

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

 

//2、引脚选择

GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);

GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);

 

//3、引脚设置

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

PORT_UART1_TX.GPIO_Mode=GPIO_Mode_AF;

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

//PORT_UART1_TX.GPIO_Speed=GPIO_Speed_10MHz;

PORT_UART1_TX.GPIO_PuPd=GPIO_PuPd_UP;

GPIO_Init(GPIOA,&PORT_UART1_TX);

 

GPIO_InitTypeDef PORT_UART1_RX;//定义RX脚

PORT_UART1_RX.GPIO_Mode=GPIO_Mode_AF;

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

//PORT_UART1_RX.GPIO_Speed=GPIO_Speed_10MHz;

PORT_UART1_RX.GPIO_PuPd=GPIO_PuPd_UP;

GPIO_Init(GPIOA,&PORT_UART1_RX);

 

//4、串口参数配置

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

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

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;//设置模式

USART_Init(USART1,&MyUsart1);

//允许接收中断RXNE和发送完成中断TC

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

USART_ITConfig(USART1,USART_IT_TC,ENABLE);

 

//5、使能

USART_Cmd(USART1,ENABLE);

 

//6、中断向量设置

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;//设置中断

NVIC_InitStructure.NVIC_IRQChannelPriority=0;//设置优先级

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能

NVIC_Init(&NVIC_InitStructure);

 

while(1){

 

}

}

 

//中断函数

void USART1_IRQHandler(void){

unsigned char temp=0;

//如果是接收中断

if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){

temp=USART_ReceiveData(USART1);//读完即自动清除RXNE

USART_SendData(USART1,temp);

//USART_ClearFlag(USART1,USART_FLAG_RXNE);

}

//如果是发送中断

else

{

USART_ClearFlag(USART1,USART_FLAG_TC);

//......

}

}


推荐阅读

史海拾趣

问答坊 | AI 解惑

串联对个设备后往一个串口写数据

串联对个设备后,这些设备均是独立往一个串口写数据, 后果有没有影响? 请有实战者给予回答。 谢谢!…

查看全部问答>

嵌入式TCP/IP数据帧结构定义?

在一般的代码中都可以看到如下定义的帧结构 struct ip { uint         EtherHead[9];             uchar         VerandIphLen;       & ...…

查看全部问答>

RT-Thread MIPS分支连载:MIPS体现结构的历史

  MIPS体系结构(Microprocessor without interlocked piped stages)  MIPS技术公司是一家设计制造高性能、高档次及嵌入式32位和64位处理器的厂商,在RISC处理器方面占有重要地位。1984年,MIPS计算机公司成立。1992年,SGI收购了MIPS计算机公 ...…

查看全部问答>

ucos的信息邮箱用在子函数里,是不是消息邮箱的指针就传递不出来了啊?

ucos 用在任务之间,任务不删除任务中的变量就还在生存,所以邮箱能够把指针传递出来,但是如果用在子函数中,子函数运行结束,变量就没了,那么邮箱传递的地址内容就不对了。我的理解对吗,如果对的话,那怎么从子函数中传递出多个数据例如一个数 ...…

查看全部问答>

多参量调试信号源---上位机软件界面

主要分为两部分,上面是交流信号,可输出三角波和正弦波,每个信号可选择输出电压幅度,频率和相位。左边的波形显示是调节参数后即将输出的波形的形状(目前还没有输出),当用户确定需要输出该波形后点击 “开始交流输出”后信号源即开始输出波 ...…

查看全部问答>

【科普】嵌入式系统常见的OS(附资料推荐)

嵌入式操作系统与通用的操作相比较主要特点在于: 1.小内核,稳定可靠。 2.需要可装卸、可裁剪,以便能灵活应对各种不同的硬件平台。 3.面向应用,强实时性,可用于各种设备控制当中。 国际上常见的嵌入式操作系统大约有40种左,右如:Li ...…

查看全部问答>

电源电池芯片

开关型2/3/4节锂离子/锂聚合物充电管理芯片 1、 HB6295功能简述1.1、特性● 适用于2、3、4节锂离子/锂聚合物高效率充电器设计● 0.5%的充电电压控制精度 ● 恒压充电电压值可通过外接电阻微调 ● 智能电池检测 ● 外置功率MOSFET● 开关频率400KH ...…

查看全部问答>

EEWORLD大学堂----使用Atmel Studio 6进行系统内编程

使用Atmel Studio 6进行系统内编程:https://training.eeworld.com.cn/course/450介绍在Atmel Studio 6中进行系统内编程。视频中将通过一个案例项目手把手教你一些关键步骤。…

查看全部问答>

设计狮大神你怎么看?这个可以替代带灯轻触开关的结构--可发光可贴片的硅胶按键

LED SMD Rubber Touch Switch 贴片带灯硅胶按键。 寿命300W次,过回流焊,耐高温280度。发光均匀。 能否替代带灯轻触开关呢? …

查看全部问答>