#include"stm32f10x.h"
#include"delay.h"
/******串口通信********/
void USART2_Init(void)
{
GPIO_InitTypeDef GPIO_InitCount;
USART_InitTypeDef USART_InitUSART;
NVIC_InitTypeDef NVIC_InitNVIC;
/*******IO口初始化********/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
GPIO_InitCount.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitCount.GPIO_Pin=GPIO_Pin_2;
GPIO_InitCount.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitCount);
GPIO_InitCount.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitCount.GPIO_Pin=GPIO_Pin_3;
GPIO_InitCount.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitCount);
/*********串口初始化**********/
USART_InitUSART.USART_BaudRate=115200; //设置波特率
USART_InitUSART.USART_HardwareFlowControl=USART_HardwareFlowControl_None; //不使用硬件流
USART_InitUSART.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_InitUSART.USART_Parity=USART_Parity_No; //不使用奇偶校验
USART_InitUSART.USART_StopBits=USART_StopBits_1; //停止位
USART_InitUSART.USART_WordLength=USART_WordLength_8b; //字长8位
USART_Init(USART2,&USART_InitUSART);
/*********使能串口********/
USART_Cmd(USART2,ENABLE);
/******使能中断*******/
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);
/*******设置中断*********/
NVIC_InitNVIC.NVIC_IRQChannel=USART2_IRQn; //选择通道(stm32f10x.h头文件)
NVIC_InitNVIC.NVIC_IRQChannelCmd=ENABLE; //是否开启通道
NVIC_InitNVIC.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级
NVIC_InitNVIC.NVIC_IRQChannelSubPriority=1; //相应优先级
NVIC_Init(&NVIC_InitNVIC);
}
/*********中断服务函数***********/
void USART2_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART2,USART_IT_RXNE))
{
res=USART_ReceiveData(USART2); //接收到的数据赋值到res上
USART_SendData(USART2,res); //将res的数据发送出去
}
}
int main(void)
{
/**********中断函数********/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
USART2_Init();
while(1);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
首先我没有你板子的原理图,所以我不是很清楚;
其次我的建议是你看看你PA2口是不是有被LED占用了,如果占用就不行;
还有PA2复用功能是USART2_TX,并不是端口重映射,重映射是将USART2_TX在PA2端口重映射到PD5,PD6
一周热门 更多>