初级会员

- 积分
- 55
- 金钱
- 55
- 注册时间
- 2014-10-1
- 在线时间
- 1 小时
|
5金钱
U16 dataR;
void USART2_IRQHandler(void)
{
u8 res;
if(USART2->SR&(1<<5))//接收到数据
{
dataR[0]++;
if(dataR>500)dataR[0]=0;LED=!LED;
}
}
//初始化IO 串口1
void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
RCC->APB1ENR|=1<<17; //使能串口2时钟
GPIOA->CRL&=0XFFFF00FF;
GPIOA->CRL|=0X00008B00;//IO状态设置 PA.2~U2_TX PA.3~U2_RX
RCC->APB1RSTR|=1<<17; //复位串口1
RCC->APB1RSTR&=~(1<<17);//停止复位
//波特率设置
USART2->BRR=mantissa; // 波特率设置
USART2->CR1|=0X200C; //使能u2,收发使能,M字长默认8位,默认1位停止,无校验位.
//使能接收中断
USART2->CR1|=1<<8; //PE中断使能
USART2->CR1|=1<<5; //接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART2_IRQChannel,2);//组2,最低优先级
}
原子老师 以上是我写u串口2的程序,但是led没有响应,应该是没有中断产生
不知道哪里有问题,
|
最佳答案
查看完整内容[请看2#楼]
回复【5楼】正点原子:
---------------------------------
已解决,原来是时钟问题
|