历史上的今天
今天是:2024年09月29日(星期日)
2021年09月29日 | STM32入门学习之USART中断(STM32F030F4P6基于CooCox IDE)
2021-09-29 来源: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);
//......
}
}
史海拾趣
|
对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。内容均来自于CSDN的经典老贴。 问题一:我声明了什么! String ...… 查看全部问答> |
|
编写一个在WinCE下运行的 ,基于MFC的应用程序,读取.txt文件 文件内容的结构如下 书名1;价格1 书名2;价格2 书名3;价格 3 。。。。。。 CFile myfile(L\"D:\\\\food.txt\", CFile::modeRead); int length = myfile.GetLength(); char ...… 查看全部问答> |
|
我的开发板的cpu是s3c2410的,操作系统是wince5.0。买了一个gps接收器和一个蓝牙棒(板子上不带蓝牙),将蓝牙棒和板子的usb连接,wince下的一个蓝牙管理程序可以找到gps,但是我用OZi for ppc的软件只支持com口的数据传输,在笔记本上蓝牙口可以自 ...… 查看全部问答> |
|
我的硬件原理图如下链接:请放心打开! http://www.dzjia.cn/html/jiejuefangan/20070619/24939_2.html 如图示:P2.7接到RC500的NCS片选脚上,这时我想要访问RC500的内部地址,我就应该先定义要访问的地址,如下: #define Page_Sel   ...… 查看全部问答> |
|
我新建了一个智能设备应用程序。数据库的数据是用md5加密了,我现在要用到md5这个类。为什么我都引用了 using System.Security.Cryptography。干吗md5类还是用不了呢。如果不行,有什么好办法呢… 查看全部问答> |
|
首先LPC1114这个板是不好分开的,我的工具就一把削笔刀,所以只是把PCB线画断。昨晚把外围电路电源和芯片的电源分开 居然可以找到 还可以仿真 下载也没出错 就是不运行下载的程序,怀疑是复位电路电阻大了,弄了下没效果 眼看2点了 明早上班 ...… 查看全部问答> |




