STM32F407VET6 普通 IO 口模拟串口发送数据

该博客详细介绍了如何使用STM32F407VET6的普通IO口模拟串口进行数据发送,特别强调只实现了发送功能而未涉及接收。在验证过程中,作者提醒读者注意使用USB转TTL而非USB转232,因为发送的是TTL电平。文中提到了两种实现方法:通过调节占空比的定时器延时法和利用定时器中断的方法。
摘要由CSDN通过智能技术生成

1、只实现了,使用普通 IO 口模拟串口的发送,没有实现接收

2、由于是模拟发送的是 TTL 电平,所以在使用串口助手验证发送数据的准确性时,应该使用 USB 转 TTL ,而不能使用 USB 转 232(验证时,本人犯了这样的错误)

方法一:调节占空比,实现定时器延时

/对应波特率的1个电平持续时间
//(1/2400) = 416us
#define IO_USART_SENDDELAY_TIME 	416

void uart_tx_bit(uint8_t bit) {
	if (bit == 1) {
		GPIO_SetBits(GPIOD, GPIO_Pin_12);
	} else {
		GPIO_ResetBits(GPIOD, GPIO_Pin_12);
	}
}

void uart_tx_delayus(uint32_t nTime) {
	uint16_t tmp;
	//获得 TIM4 计数器的值
	tmp = TIM_GetCounter(TIM4);
	if (tmp + nTime <= 65535)
		while ((TIM_GetCounter(TIM4) - tmp) < nTime);
	else {
		TIM_SetCounter(TIM4, 0);
		//设置 TIM4 计数器寄存器值为0
		while (TIM_GetCounter(TIM4) < nTime);
	}
}

void uart_tx_byte(uint8_t data) {
	uint8_t i, tmp;

	// 开始位
	uart_tx_bit(0);	//将TXD的引脚的电平置低
	uart_tx_delayus(IO_USART_SENDDELAY_TIME);

	for (i = 0; i < 8; i++) {
		tmp = (data >> i) & 0x01;
		i
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值