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);
}
具体延时根据所需波特率修改;谢谢大家!