@PWM与UART复用冲突的解决方案

PWM与UART复用冲突的解决方案

前言:(可以忽略)

本小白在做步进电机配置的时候,由于当时设计硬件欠缺考虑,故将“pwm”与“串口通信”配置在了一起,导致之后在编写操作指令的时候遇到了比较大的问题,以至于项目推迟。曾浏览CSDN等各大电子论坛,本人眼拙,没看到明确的解决办法;不过在跟老大请教和与萌萌同学聊天的时候,想到一解决办法,特此鼓励鼓励!也特意留下此文,墨水没有到的地方望大佬不吝赐教。

现象:

首先配置的串口PA9作为Tx:复用推挽输出
仿真::正常通信;
之后配置TIM1的初始化PA8作为pwm引脚:复用推挽输出
仿真::频率输出正常,串口可接收不能发出数据;
异或串口正常,频率无输出。

解决方法

仅能实现一个功能,pwm复用,io模拟串口通信;

static void IO_to_Usartsend(char val)
{
  /*说明 如果为115200 延时时间为8us   (==8.6)如果为115200 延时时间为8us   (==8.6)
                                             _300BuadRate	3150
                                             _600BuadRate	1700
                                             1200BuadRate	800
                                            _9600BuadRate	104*/
  u8 i;
  pinWrite(42, 0);			//起始位,拉低电平
  Delay_us(7);
  for(i = 0; i < 8; i++)		//8位数据位
  { 
    if(val & 0x01)
      pinWrite(42, 1);
    else
       pinWrite(42, 0);
    Delay_us(7);
    val >>= 1;
  }
   pinWrite(42, 1);			//停止位,拉高电平
  Delay_us(9);
}
void LCDSend(unsigned char *buf, unsigned char len)
{
  //comSendBuf(COMx_PORT,(char*)buf, len);//自带复用功能使用
  /*io模拟串口*/   
  for(int i=0;i<len;i++)
  {
    IO_to_Usartsend(buf[i]);
  Delay_us(20);
  }
    Delay_ms(1);
}

具体延时根据所需波特率修改;谢谢大家!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值