STM32 Uart串口中断响应、发送接收详细程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序实现功能:可以直接接收USART1的数据,并通过串口调试输出显示
#include"stm32f10x_lib.h"
void NVIC_Configuration(void);
void RCC_Configuration(void);
void GPIO_Configuration(void);
ErrorStatus HSEStartUpStatus;
USART_InitTypeDef USART_InitStructure;
USART_ClockInitTypeDef USART_ClockInitStructure;
int main()
{
#ifdef DEBUG
debug
#endif
RCC_Configuration();
NVIC_Configuration();
GPIO_Configuration();
/*串口传输速率的大小必须与RCC所设定的时钟相对应起来*/
USART_ART_BaudRate = 9600; //设置USART的传输速率/*设定数据的接收发送模式*/
USART_ART_WordLength = USART_WordLength_8b;//在一帧中传输或接受8位数据位
USART_ART_StopBits = USART_StopBits_1; //定义在帧的结尾传输一个停止位
USART_ART_Parity = USART_Parity_No; //奇偶失能
USART_ART_HardwareFlowControl = USART_HardwareFlowControl_None; //指定硬件流控制模式RTS和CTS使能
USART_ART_Mode = USART_Mode_Rx | USART_Mode_Tx; //指定使能或失能发送和接受模式Tx发送使能和Rx接收使能
USART_Clock ART_Clock = USART_Clock_Disable; //提升USART时钟时使能还是失能,钟低电平活动
USART_ART_CPOL = USART_CPOL_Low; //指定SLCK引脚上时钟的极性
USART_ART_CPHA = USART_CPHA_2Edge; //时钟第二个边缘进行数据捕获
USART_ART_LastBit = USART_LastBit_Disable; //在SCLK引脚上输出最后发送的那个数据字的脉冲不从SCLK输出
USART_ClockInit(USART1, &USART_ClockInitStructure);
USART_Init(USART1, &USART_InitStructure);
/*输入输出的中断使能*/
// USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_Cmd(USART1, ENABLE); //启动串口使能USART1外设
while(1)
{
}
/*
USART_SendData(USART1, 0X26); //发送数据
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET){}//等待发送结束*/
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef VETB_TAB_RAM
NVYC_SetVectorTable(NVIC_VectTab_RAM,0x0);
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
/* Enable the USART1 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel; //通道设置为串口1中断(故后面应选择在“void USART1_IRQHandler(void)”开中断)
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //中断占先等级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //中断响应优先级0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //打开中断
NVIC_Init(&NVIC_InitStructure);
}
void RCC_Configuration(void)
{
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus=RCC_WaitForHSEStartUp();
if(HSEStartUpStatus==SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1); //串口波特率的确定
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY==RESET)) {}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);