寄存器操作串口

使用百问网的STM32F103MINI开发板完成下面实验。

1、串口基本知识。

TXD默认是高电平。

开始位是1位低电平。

发送字符'a','a'的ASCII码是0x41,0100 0001,bit0=1,bit1/2/3/4/5=0,bit6=1,bit7=0。

校验位,以前数据传输没那么稳定常使用,现在经常不使用,

偶校验就是数据位和校验位的1个数和是偶数。

停止位可以是1位、1.5位、2位。

115200,8N1 是最常用的串口数据格式,波特率115200,8位数据,无校验,1位停止。

2、使用MINI开发板通过寄存器进行编程。

①别名设置。

typedef    unsigned int    uint32_t;
typedef struct
{
	volatile    uint32_t    SR;
	volatile    uint32_t    DR;
	volatile    uint32_t    BRR;
	volatile    uint32_t    CR1;
	volatile    uint32_t    CR2;
	volatile    uint32_t    CR3;
	volatile    uint32_t    GTPR;
} USART_TypeDef;

②初始化设置。

void uart_init(void)
{
	USART_TypeDef *usart1 = (USART_TypeDef*)0x40013800;
	
	volatile unsigned int *pReg;
	pReg = (unsigned int*)(0x40021000 + 0x18);
	*pReg |= (1<<2) | (1<<14);    //使能GPIO和串口时钟
	
	pReg = (unsigned int*)(0x40010800 + 0x4);
	*pReg &= ~((3<<4) | (3<<6));
	*pReg |= (1<<4) | (2<<6);    //10M速率,复用推挽输出
	
	usart1->BRR = (4<<4) | (5);    //设置波特率115200
	
	usart1->CR1 = (1<<13) | (0<<12) | (0<<10) | (1<<3) | (1<<2);
	usart1->CR2 &= ~(3<<12);    //设置数据格式8N1
}

③接收函数。

int getchar(void)
{
	char c;
	USART_TypeDef *usart1 = (USART_TypeDef*)0x40013800;
	while((usart1->SR & (1<<5)) == 0);    //等待RXNE接收非空
	c = usart1->DR;
	return c;
}

④发送函数。

int putchar(char c)
{
	USART_TypeDef *usart1 = (USART_TypeDef*)0x40013800;
	while((usart1->SR & (1<<7)) == 0);    //等待TXE发送为空
	usart1->DR = c;
	return c;
}

⑤主函数操作。

int main(void)
{
    char c;
	uart_init();
	putchar('H');
	putchar('e');
	putchar('l');
	putchar('l');
	putchar('o');
	putchar('\n');    //这个是回车,回到第二行的与第一行结尾同样位置
//	putchar('\r');    //回到一行的开头
	while(1)
	{
		c = getchar();
		putchar(c);
		putchar(c + 1);
	}
}

3、实验结果。

通过Moba接收串口数据,Moba发送1后接收到1和2,第二行列位置是第一行列位置的结尾,

这个问题可以通过putchar('r')解决。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值