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

[复制链接]
2122|2
 楼主| jinglixixi 发表于 2023-8-12 11:26 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2023-8-12 11:29 编辑

#申请原创#  @21小跑堂
HC32L196配有串口通信功能,并可对相应的串口设备加以控制,如控制MP3播放模块及舵机等。

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


其中: RX连接PA09TX连接PA10

多串口引脚配置的函数为:
  1. void App_PortInit(void)
  2. {
  3.     stc_gpio_cfg_t stcGpioCfg;
  4.     DDL_ZERO_STRUCT(stcGpioCfg);
  5.     Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);  //GPIO外设模块时钟使能
  6.     stcGpioCfg.enDir = GpioDirOut;
  7.     Gpio_Init(GpioPortA,GpioPin9,&stcGpioCfg);
  8.     Gpio_SetAfMode(GpioPortA,GpioPin9,GpioAf1);       //配置PA09 为UART0 TX
  9.     stcGpioCfg.enDir = GpioDirIn;
  10.     Gpio_Init(GpioPortA,GpioPin10,&stcGpioCfg);
  11.     Gpio_SetAfMode(GpioPortA,GpioPin10,GpioAf1);      //配置PA10 为UART0 RX
  12. }

对串口的初始化函数为:
  1. void App_UartCfg(void)
  2. {
  3.     stc_uart_cfg_t  stcCfg;
  4.     stc_uart_multimode_t stcMulti;
  5.     stc_uart_baud_t stcBaud;
  6.     DDL_ZERO_STRUCT(stcCfg);
  7.     DDL_ZERO_STRUCT(stcMulti);
  8.     DDL_ZERO_STRUCT(stcBaud);
  9.     Sysctrl_SetPeripheralGate(SysctrlPeripheralUart0,TRUE); //UART0外设模块时钟使能
  10.     stcCfg.enRunMode = UartMskMode3;     //模式3
  11.     stcCfg.enStopBit = UartMsk1bit;          //1位停止位
  12.     stcCfg.enMmdorCk = UartMskEven;       //偶校验
  13.     stcCfg.stcBaud.u32Baud = 9600;         //波特率9600
  14.     stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div;         //通道采样分频配置
  15.     stcCfg.stcBaud.u32Pclk = Sysctrl_GetPClkFreq();       //获得外设时钟(PCLK)频率值
  16.     Uart_Init(M0P_UART0, &stcCfg);        //串口初始化
  17.     Uart_ClrStatus(M0P_UART0,UartRC);     //清接收请求
  18.     Uart_ClrStatus(M0P_UART0,UartTC);     //清发送请求
  19.     Uart_EnableIrq(M0P_UART0,UartRxIrq);   //使能串口接收中断
  20.     Uart_EnableIrq(M0P_UART0,UartTxIrq);   //使能串口发送中断
  21. }

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

设置音量程序:
  1. setVolume(15);
  2. for(j=0;j<10;j++)
  3. {
  4.      Uart_SendDataPoll(M0P_UART0,cmd6[j]);
  5.      delay_1us(5);
  6. }
指定乐曲播放程序:
  1. playn(i);
  2. for(j=0;j<10;j++)
  3. {
  4.       Uart_SendDataPoll(M0P_UART0,cmd3[j]);
  5.       delay_1us(5);
  6. }

2.jpg
2 串口测试

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

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


在配合歌单的情况下,具有串口与GPIO口控制功能的MP3播放程序为:
  1. Gpio_SetIO(STK_LED_PORT, STK_LED_PIN);
  2. while(1)
  3. {
  4.      if(Gpio_GetInputIO(GpioPortA, GpioPin7)==0)
  5.      {
  6.           POINT_COLOR=RED ;
  7.           showhanzi16(18,71+i*20,28);
  8.           i=(i+1)%9;
  9.           POINT_COLOR=WHITE;
  10.           showhanzi16(18,71+i*20,28);        
  11.           playn(i);
  12.           Gpio_ClrIO(STK_LED_PORT, STK_LED_PIN);
  13.           for(j=0;j<10;j++)
  14.           {
  15.                 Uart_SendDataPoll(M0P_UART0,cmd3[j]); //查询方式发送数据
  16.                 delay_1us(5);
  17.           }
  18.           delay1ms(200);
  19.           Gpio_SetIO(STK_LED_PORT, STK_LED_PIN);
  20.           delay1ms(300);
  21.          }
  22.          delay1ms(500);
  23. }

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[]则用于存放转动角度的设置指令。

用于设置工作频率的程序为:
  1. for(j=0;j<7;j++)
  2. {
  3.        Uart_SendDataPoll(M0P_UART0,MLF[j]);
  4.        delay_1us(5);
  5. }
在连接串口的情况下,其测试效果如图4所示。
4.jpg
4 设置工作频率


用于角度调节的程序为:
  1. i=3;
  2. while(1)
  3. {
  4.       if(Gpio_GetInputIO(GpioPortA, GpioPin7)==0)
  5.       {
  6.             MLP[4]=i/10+'0';
  7.             MLP[5]=i%10+'0';                                          
  8.             for(j=0;j<7;j++)
  9.             {
  10.                   Uart_SendDataPoll(M0P_UART0,MLP[j]); //查询方式发送数据
  11.                   delay_1us(5);
  12.             }
  13.             delay1ms(500);
  14.             i=(i+1)%13;
  15.             if(i==0) i=3;
  16.       }
  17.       delay1ms(500);
  18. }

通过串口助手软件,其测试效果如图5所示。
5.jpg
图5 测试角度调节

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

7.jpg
图7 角度调节2

8.jpg
图 8角度调节3



chenqianqian 发表于 2023-8-12 12:42 来自手机 | 显示全部楼层
现在的芯片集成度太高了。
xxrs 发表于 2023-8-13 19:44 | 显示全部楼层
chenqianqian 发表于 2023-8-12 12:42
现在的芯片集成度太高了。

摩尔定律
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部