[方案相关]【HC32L196PCTA测评】+串口应用篇

HC32L196配有串口通信功能,并可对相应的串口设备加以控制,如控制MP3播放模块及舵机等。

1. 控制MP3播放模块
这里所选用的MP3模块具有串口控制功能,其引脚分布如图1所示。

图1 引脚分布

其中: RX连接PA09,TX连接PA10。

多串口引脚配置的函数为:
复制
void App_PortInit(void)

{

    stc_gpio_cfg_t stcGpioCfg;

    DDL_ZERO_STRUCT(stcGpioCfg);

    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);  //GPIO外设模块时钟使能

    stcGpioCfg.enDir = GpioDirOut;

    Gpio_Init(GpioPortA,GpioPin9,&stcGpioCfg);

    Gpio_SetAfMode(GpioPortA,GpioPin9,GpioAf1);       //配置PA09 为UART0 TX

    stcGpioCfg.enDir = GpioDirIn;

    Gpio_Init(GpioPortA,GpioPin10,&stcGpioCfg);

    Gpio_SetAfMode(GpioPortA,GpioPin10,GpioAf1);      //配置PA10 为UART0 RX

}

对串口的初始化函数为:
复制
void App_UartCfg(void)

{

    stc_uart_cfg_t  stcCfg;

    stc_uart_multimode_t stcMulti;

    stc_uart_baud_t stcBaud;

    DDL_ZERO_STRUCT(stcCfg);

    DDL_ZERO_STRUCT(stcMulti);

    DDL_ZERO_STRUCT(stcBaud);

    Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0,TRUE); //UART0外设模块时钟使能

    stcCfg.enRunMode = UartMskMode3;     //模式3

    stcCfg.enStopBit = UartMsk1bit;          //1位停止位

    stcCfg.enMmdorCk = UartMskEven;       //偶校验

    stcCfg.stcBaud.u32Baud = 9600;         //波特率9600

    stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div;         //通道采样分频配置

    stcCfg.stcBaud.u32Pclk = Sysctrl_GetPClkFreq();       //获得外设时钟(PCLK)频率值

    Uart_Init(M0P_UART0, &stcCfg);        //串口初始化

    Uart_ClrStatus(M0P_UART0,UartRC);     //清接收请求

    Uart_ClrStatus(M0P_UART0,UartTC);     //清发送请求

    Uart_EnableIrq(M0P_UART0,UartRxIrq);   //使能串口接收中断

    Uart_EnableIrq(M0P_UART0,UartTxIrq);   //使能串口发送中断

}

在使用以下程序的情况下,可得到图2所示的音量与乐曲的播放指令输出。

设置音量程序:
复制
setVolume(15);

for(j=0;j<10;j++)

{

     Uart_SendDataPoll(M0P_UART0,cmd6[j]);

     delay_1us(5);

}

指定乐曲播放程序:
复制
playn(i);

for(j=0;j<10;j++)

{

      Uart_SendDataPoll(M0P_UART0,cmd3[j]); 

      delay_1us(5);

}

图2 串口测试
MP3播放控制的整体电路如图3所示,稍感不足的是HC32L196是面向低功耗和低电压的,尽管它可以控制USB转TTL功能模块,但它却无法直接带动MP3播放模块,需加一级驱动才能工作。

好在MP3播放模块除了可以用串口来控制外,还可以通过GPIO口来控制。
图3 播放电路

在配合歌单的情况下,具有串口与GPIO口控制功能的MP3播放程序为:
复制
Gpio_SetIO(STK_LED_PORT, STK_LED_PIN);

while(1)

{

     if(Gpio_GetInputIO(GpioPortA, GpioPin7)==0)

     {

          POINT_COLOR=RED ; 

          showhanzi16(18,71+i*20,28);

          i=(i+1)%9;

          POINT_COLOR=WHITE; 

          showhanzi16(18,71+i*20,28);        

          playn(i);

          Gpio_ClrIO(STK_LED_PORT, STK_LED_PIN);

          for(j=0;j<10;j++)

          {

                Uart_SendDataPoll(M0P_UART0,cmd3[j]); //查询方式发送数据

                delay_1us(5);

          }

          delay1ms(200);

          Gpio_SetIO(STK_LED_PORT, STK_LED_PIN);

          delay1ms(300);

         }

         delay1ms(500);

}

2. 控制舵机
这里所用的舵机是用来控制一个可进行双维调节的云台,共有2个舵机。
为了化简控制的难度,这里有配备了一个支持串口控制的双通道PWM调节模块,为此对电机的调节控制就转化成了串口通讯的问题。
所用的PWM调节模块,要求采用9600bps的波特率通讯,PWM的工作频率为 50Hz。
为便于调节控制,是将指令存放于指令数组中,其格式为:
uint8_t MLF[7]={'S','1','F','0','5','0','T'};
uint8_t MLP[7]={'S','1','D','0','0','4','T'};

其中,数组MLF[]用于存放工作频率的设置指令,而数组MLP[]则用于存放转动角度的设置指令。

用于设置工作频率的程序为:
复制
for(j=0;j<7;j++)

{

       Uart_SendDataPoll(M0P_UART0,MLF[j]); 

       delay_1us(5);

}

在连接串口的情况下,其测试效果如图4所示。

图4 设置工作频率


 

用于角度调节的程序为:
复制
i=3;

while(1)

{

      if(Gpio_GetInputIO(GpioPortA, GpioPin7)==0)

      {

            MLP[4]=i/10+'0';

            MLP[5]=i%10+'0';                                           

            for(j=0;j<7;j++)

            {

                  Uart_SendDataPoll(M0P_UART0,MLP[j]); //查询方式发送数据

                  delay_1us(5);

            }

            delay1ms(500);

            i=(i+1)%13;

            if(i==0) i=3;

      }

      delay1ms(500);

}

通过串口助手软件,其测试效果如图5所示。

图5 测试角度调节

在完成整体电路连接的情况下,其调节效果如图6至图8所示,即每按下一次用户键,则舵机就转动一个调节角度。
图6 角度调节1

7.jpg (115.83 KB )

下载附件

2023-8-12 11:22 上传

图7 角度调节2

图 8角度调节3。
---------------------
作者:jinglixixi
链接:https://bbs.21ic.com/icview-3320574-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值