📄 uart.c
字号:
#include"config.h"
uint8_t ASCLL_1[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};
void USART_Init(void)
{
/*设置波特率*/
UBRRH = 0;
UBRRL = 3;/*设置波特率,16M晶振,256000波特率,参考DataSheet*/
//UBRRH = (((F_CPU/BAUD)/16)-1)/256;
//UBRRL = (((F_CPU/BAUD)/16)-1)%256;
UCSRB |= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); //使能发送,接收,接收完成中断
}
void USART_Send_Char(unsigned char data)
{
while( !(UCSRA & (1<<UDRE))); //等待发送缓冲器为空
UDR = data; //将数据放入缓冲区,发送数据
}
void USART_Send_Str(char *str)
{
while(*str!='\0')
{
USART_Send_Char(*str);
str++;
}
}
void uart_send_4byte( uint32_t data )//发送一个无符号长整型的数据,并在串口调试助手上能以十进制显示
{
char temp[20]; //字符串位数最大21位
uint8_t i=0;
if(data == 0)
{
USART_Send_Char(0 + '0'); //'0' 等同于 0x30
}
else
{
while(data)
{
temp[i++] = data%10;
data /= 10;
}
for( ;i>0;i--)
{
USART_Send_Char(temp[i-1] + '0'); //'0' 等同于 0x30
}
}
}
void send_1byte_hex(uint8_t data1) //发送到串口调试助手,以十六进制的形式显示
{
unsigned char i=0,j=0;
i=data1/16; //取高半字节
j=data1%16; //取低半字节
USART_Send_Char(ASCLL_1[i]);
USART_Send_Char(ASCLL_1[j]);
}
void uart_send_Enter()
{
USART_Send_Char('\r');
USART_Send_Char('\n');
}
void send_buf_hex(UINT8 *Buffer) //将缓冲区的数据通过串口发送到电脑
{//(十六进制显示)
uint16_t k=0;
for(k=0;k<512;k++)
{
if(k%16==0)
USART_Send_Str("\r\n");
send_1byte_hex(Buffer[k]);
USART_Send_Char(' ');
}
USART_Send_Str("\r\n");
}
void send_buf(UINT8 *Buffer) //将缓冲区的数据通过串口发送到电脑
{
uint16_t k=0;
for(k=0;k<512;k++)
{
USART_Send_Char(Buffer[k]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -