extern u8 USART_RX_BUF[10];
void hanld_tx(u8 *TEMP)
{
USART1->DR=(*TEMP);
TEMP++;
while(USART1->SR&0X04==0);
}
u8 cnt=0;
extern u8 flag_rx;
u8 USART_RX_BUF[10]; //接收缓冲,最大64个字节.
void USART1_IRQHandler(void) //状态寄存器(USART_SR)对这个寄存器进行相应的判断
{
if(USART1->SR&(1<<5))//接收到数据
{
USART_RX_BUF[cnt]=USART1->DR;
cnt++;
if(cnt>=10)
{
cnt=0;
flag_rx=1;
}
}
}
int main(void)
{
Stm32_Clock_Init(9);
delay_init(72);
uart_init(72,9600);
delay_ms(10);
while(1)
{
if(flag_rx)
{
flag_rx=0;
hanld_tx(USART_RX_BUF);
}
}
}
思路:向串口发送10个字节 接收到显示到串口上
问题1;发送10个字节不能正常显示 显示出错而且并不是显示10个字节
问题2;我是1秒发送10个字节用中断 但是在串口显示1秒显示1个字节数据正确(只是显示前面9个)正确的显示应该是1秒到了应该刷新10个字节
问题3:当我接收和发送数据大小设置为10个字节时候 而我确发送9个字节给单片机 只能显示9个并且数据正确 如果我发送10个的话 会出现问题的结果
问题4:我在uart.c文件中定义了u8 USART_RX_BUF[10]; 在主文件中做了外部变量引用 但是我修改主文件中 USART_RX_BUF数据包达小时候 编译却能通过
一晚上都无法解决 希望的到原子哥或则 知道的高人指点
谢谢 今天是父亲节 记得给幸苦的老爸打电话哈
|