新手入门
- 积分
- 7
- 金钱
- 7
- 注册时间
- 2020-6-29
- 在线时间
- 1 小时
|
直接操作寄存器配置usart1中断方式接收数据,然后回传到串口(循环查询接收可以,只是中断方式不行)。但是串口发来数据后没有反应。忘大佬看一下。以下是中断配置代码:
void USART1_Init(unsigned int bound)
{
unsigned int temp;
unsigned int mantissa , fraction;
//ʹÄÜʱÖÓ
RCC->APB2ENR|=1ul<<2;
RCC->APB2ENR|=1ul<<14;
GPIOA->CRH&=0XFFFFF00F;;
GPIOA->CRH|=0X000008B0;;
//¸´Î»
//USART->SR&=~(1ul<<6);
//USART->SR&=~(1ul<<7);
//ÉèÖò¨ÌØÂÊ
temp=(float)(72*1000000)/(bound*16);
mantissa=temp;
fraction=(temp-mantissa)*16;
mantissa<<=4;
mantissa += fraction;
USART->BRR=mantissa;
//USART->BRR=0x271;
USART->CR1|=1UL<<5;//ÖжÏʹÄÜ
USART->CR1|=0x202c;
UART_NVIC_init();
}
void send(int data)
{
while((USART->SR&(1ul<<6))==0);
USART->DR=(unsigned char)data;
//while((USART->SR&(1ul<<6))==0);
}
void USART1_IRQHander(void)
{
unsigned char res;
while((USART->SR&(1ul<<5))==0);
res=USART->DR;
send(res);
}
下面是nvic配置
头文件:
#define AIRCR *(unsigned int *) 0xE000ED0C
#define UART1_IP *(unsigned int *) 0xE000E425
#define UART1_SIER *(unsigned int *) 0xE000E104
void UART_NVIC_init(void);
c文件:
#include"UARTt_NVIC.h"
void UART_NVIC_init()
{
AIRCR=0x05FA0000|(5ul<<8);
UART1_IP=0xf0;
UART1_SIER|=(1ul<<5);
}
然后是main函数
USART1_Init(500000);
while(1);
|
|