打印
[技术问答]

[M051] M031SE3AE 单片串口0与串口2初始化问题

[复制链接]
747|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2022-7-1 14:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在使用新唐M031SE3AE的串口0和串口2时出现那个最后初始化,最后初始化的串口有用,前一个初始化不可用。如:uart0Init();uart2Init();这样,只有uart2的串口才可以使用。

使用特权

评论回复
沙发
flycamelaaa| | 2022-7-1 14:32 | 只看该作者
从图上看,屏不是由MCU驱动的。显示模糊可能是驱动电压不够。

使用特权

评论回复
板凳
laocuo1142|  楼主 | 2022-7-1 14:32 | 只看该作者
#define CS PB13
#define WR PB14
#define DATA PB15

#define SYS_DIS 0x0 //关闭系统振荡器和 LCD偏压发生器
#define SYS_EN 0x2 //打开系统振荡器
#define LCD_OFF 0x4 //关闭 LCD 显示
#define LCD_ON 0x6 //开启 LCD 显示
#define WDT_DIS 0x10 //禁止看门狗
#define SC 0x30         //110000
#define uchar unsigned char
//输出数据
uint32_t TM1622Tab[16]={0x1e0,0x1e0,0x11e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x0};
uint32_t TM1622Tab_input[10]={0x23,0x243,0x223,0x222,0x2333,0x552,0x23,0x32,0x232,0x523};

//时延函数,单位us
void delay_t(uint32_t i){
                int        u32Delay = 6;
                        TIMER0->CMP = 12*i;
                        TIMER0->CTL = TIMER_CTL_CNTEN_Msk | TIMER_ONESHOT_MODE|0 ;
                        while(TIMER0->CTL & TIMER_CTL_ACTSTS_Msk);
                                for(; u32Delay > 0UL; u32Delay--)
                                        {
                                        __NOP();
                                        }
                        while(TIMER0->CTL & TIMER_CTL_ACTSTS_Msk);
                       
}
//时延函数,单位50ns
void delay_ns(uint32_t time){

        int        u32Delay=time;
                    for(; u32Delay > 0UL; u32Delay--)
    {
        __NOP();
    }

        }  
//写数据
void TM1622Wr_Data(uint32_t Data,uint32_t cnt){
                for(int i=0;i<cnt;i++){
                DATA = (Data&0x100)>>8;
                delay_t(1);      
                WR = 0;               
                delay_t(4);      
                WR = 1;      
                delay_t(3);      
                Data <<=1;


                }

}
//输入具体控制命令函数
void TM1622WrCmd(uint32_t Cmd){
                CS = 0;      
                delay_t(5);
                TM1622Wr_Data(0x100,3);//输入命令类型100

                TM1622Wr_Data(Cmd,9); //输入具体控制命令
                CS = 1;

                delay_ns(6);

}
//连续写入函数,Addr为写入地址,p为写入数据首地址
void TM1622WrALLData(uint32_t Addr,uint32_t *p,uint32_t cnt){
                CS = 0;
                delay_t(3);

                TM1622Wr_Data(0x140,3);//输入命令类型101

                TM1622Wr_Data(Addr<<3,6);

                for(int i=0;i<cnt;i++){
                        TM1622Wr_Data(*p,4);

                        p++;

                }

                CS = 1;
               
                delay_ns(6);
}
void TM1622WrOneData(uint32_t Addr,uint32_t Data)
{
  CS=0;
  TM1622Wr_Data(0x140,3);                //写入数据标志101 ,10100000
  TM1622Wr_Data(Addr<<3,6);        //写入地址数据
  TM1622Wr_Data(Data<<1,4);        //写入数据
  CS=1;   
  delay_ns(6);  
}
void delay_ms(uint32_t t){
                int k=1,j;
                for(int i=0;i<t*10;i++) {
    for(int j=0;j<65;j++) {
                        k--;
                        k++;
                }      
                }
}
int main(void)
{      
      

      

    /* Init System, IP clock and multi-function I/O */
    SYS_Init();

    /* Init UART to 115200-8n1 for print message */
    UART_Open(UART0, 115200);
      
      
          GPIO_SetMode(PB, BIT13, GPIO_MODE_OUTPUT);//1,CS
    GPIO_SetMode(PB, BIT14, GPIO_MODE_OUTPUT);//2,WR
    GPIO_SetMode(PB, BIT15, GPIO_MODE_OUTPUT);//3,DATA
                GPIO_SetMode(PB, BIT5, GPIO_MODE_OUTPUT);//4 BLK,3.3v电压输入,高电平亮

                CS = 1;
                WR = 1;
                DATA = 1;
                PB5 = 1;


delay_ms(100);


               
                TM1622WrCmd(SC);

                TM1622WrCmd(SYS_EN);
                TM1622WrCmd(LCD_ON);

        //        TM1622WrCmd(0x80);//打开声音输出
                //TM1622WrCmd(0x4);//关闭LCD显示器
                TM1622WrCmd(0x146);//时基本输出频率:8Hz WDT 使能后输出延时:1/2 s
                                TM1622WrCmd(0xc);//使能时基输入
                                TM1622WrCmd(0x1e);//清除WDT状态
                                TM1622WrCmd(0xa);//WDT失效               
                                TM1622WrCmd(0x1a);//时基发生器清零
                                TM1622WrCmd(0x1c6);//正常模式
                                delay_ms(10);

  for(int i=0;i<=31;i++)
   {
         int t=0xff; //0xa0 10100000
          TM1622WrOneData(i,t);

   }

}

使用特权

评论回复
地板
mutable| | 2022-7-3 09:09 | 只看该作者
什么图上看

使用特权

评论回复
5
skyred| | 2022-7-16 16:51 | 只看该作者
初始化遇到问题了么

使用特权

评论回复
6
sadicy| | 2022-7-24 09:59 | 只看该作者
串口一般不会有硬件问题吧?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1188

主题

5182

帖子

12

粉丝