准备用mini板的pc0、pc2、pc3、pc1(也即触摸屏的模拟spi端口) 驱动直流电机驱动器。
硬件连接:直流电机驱动器与pc0、pc2、pc3、pc13的连接有光耦隔离,5v逻辑驱动电源使用mini板的5v输出,直流电机驱动电源采用外接9v电源。
出现的问题:pc0、pc2、pc3、pc13的逻辑输出没有问题,但是串口打印程序在运行若干秒后停止显示。按复位按钮无法恢复串口打印,得按电源开关重新上电启动才能恢复正常。期间直流电机运转一直正常。如果pc0、pc2、pc3、pc13端口不接电机驱动板而是接led之类的负载的话,则串口显示是没有问题 的。
虽然说pc0、pc2、pc3、pc13的耐压是3.3v而不是5v,但这些端口作为输出而不是作为输入,应该没问题啊?再说,pc端口的问题怎么会影响到串口呢?电机驱动器与mini板的连接线包括:5v、GND、pc3、pc2。(pc0、pc13接另一个电机,暂时未使用)。驱动板、电机与mini板的距离也有10cm以上啊,照理不会干扰到的才对。
以下是程序。初始化程序使用原子的模块(其实我也使用过别的程序模块,但还是同样的问题):
int main(void)
{
u8 i,t,key;
u8 index=0;
u16 detime=0;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
RCC->APB2ENR|=1<<4; //PC时钟使能
RCC->APB2ENR|=1<<0; //开启辅助时钟
GPIOC->CRL&=0XFFFF0000;//PC0~3
GPIOC->CRL|=0X00003333;
GPIOC->CRH&=0XFF0FFFFF;//PC13
GPIOC->CRH|=0X00300000;//PC13推挽输出
// GPIOC->ODR|=0X200f; //PC0~3 13 全部上拉
  Cout(0) = PCout(2) = PCout(3) = PCout(13) = 0;
while(1)
{
printf("stop\n");
delay_ms(1000);
// 正
  Cout(3) = 1 ;
  Cout(2) = 0;
  Cout(13) = 1 ;
  Cout(0) = 0;
printf("zheng\n");
delay_ms(1000);
// 反
  Cout(3) = 0;
  Cout(2) = 1;
  Cout(13) = 0 ;
  Cout(0) = 1;
printf("fang\n");
delay_ms(1000);
// stop
  Cout(3) = 0;
PCout(2) = 0;
PCout(13) = 0 ;
PCout(0) = 0;
// GPB0=
// GPB13=
}
} |