[MM32硬件] 【MM32 eMiniBoard测评报告】串口shell测试

[复制链接]
 楼主| WoodData 发表于 2020-4-25 16:13 | 显示全部楼层 |阅读模式
本帖最后由 WoodData 于 2020-4-29 20:20 编辑

    搞了一下串口shell,移植的nr_micro_shell.( https://gitee.com/nrush/nr_micro_shell )。测试感觉还不错,shell移植也很方便。
测试:

  1. #include "nr_micro_shell.h"
  2. #include "string.h"
  3. #include "ctype.h"
  4. #include "led.h"

  5. /**
  6. * [url=home.php?mod=space&uid=247401]@brief[/url] ls command
  7. */
  8. void shell_ls_cmd(char argc, char *argv)
  9. {
  10.         unsigned int i = 0;
  11.         if (argc > 1)
  12.         {
  13.                 if (!strcmp("cmd", &argv[argv[1]]))
  14.                 {

  15.                         for (i = 0; nr_shell.static_cmd[i].fp != NULL; i++)
  16.                         {
  17.                                 shell_printf(nr_shell.static_cmd[i].cmd);
  18.                                 shell_printf("\r\n");
  19.                         }
  20.                 }
  21.                 else if (!strcmp("-v", &argv[argv[1]]))
  22.                 {
  23.                         shell_printf("ls version 1.0.\r\n");
  24.                 }
  25.                 else if (!strcmp("-h", &argv[argv[1]]))
  26.                 {
  27.                         shell_printf("useage: ls [options]\r\n");
  28.                         shell_printf("options: \r\n");
  29.                         shell_printf("\t -h \t: show help\r\n");
  30.                         shell_printf("\t -v \t: show version\r\n");
  31.                         shell_printf("\t cmd \t: show all commands\r\n");
  32.                 }
  33.         }
  34.         else
  35.         {
  36.                 shell_printf("ls need more arguments!\r\n");
  37.         }
  38. }

  39. /**
  40. * [url=home.php?mod=space&uid=247401]@brief[/url] test command
  41. */
  42. void shell_test_cmd(char argc, char *argv)
  43. {
  44.         unsigned int i;
  45.         shell_printf("test command:\r\n");
  46.         for (i = 0; i < argc; i++)
  47.         {
  48.                 shell_printf("paras %d: %s\r\n", i, &(argv[argv[i]]));
  49.         }
  50. }

  51. /**
  52. * @brief test command
  53. */
  54. void shell_led_cmd(char argc, char *argv)
  55. {
  56.         if (argc > 1)
  57.         {        
  58.                 if (!strcmp("on", &argv[argv[1]]))
  59.                 {
  60.                         if (!strcmp("1", &argv[argv[2]]))
  61.                         {
  62.                                 LED1_ON();
  63.                         }else if (!strcmp("2", &argv[argv[2]]))
  64.                         {
  65.                                 LED2_ON();
  66.                         }else if (!strcmp("3", &argv[argv[2]]))
  67.                         {
  68.                                 LED3_ON();
  69.                         }else if (!strcmp("4", &argv[argv[2]]))
  70.                         {
  71.                                 LED4_ON();
  72.                         }else
  73.                         {
  74.                                 shell_printf("useage: led [on/off] [1/2/3/4]\r\n");        
  75.                         }
  76.                 }else if (!strcmp("off", &argv[argv[1]]))
  77.                 {
  78.                         if (!strcmp("1", &argv[argv[2]]))
  79.                         {
  80.                                 LED1_OFF();
  81.                         }else if (!strcmp("2", &argv[argv[2]]))
  82.                         {
  83.                                 LED2_OFF();
  84.                         }else if (!strcmp("3", &argv[argv[2]]))
  85.                         {
  86.                                 LED3_OFF();
  87.                         }else if (!strcmp("4", &argv[argv[2]]))
  88.                         {
  89.                                 LED4_OFF();
  90.                         }else
  91.                         {
  92.                                 shell_printf("useage: led [on/off] [1/2/3/4]\r\n");        
  93.                         }
  94.                         
  95.                 }else{
  96.                         shell_printf("useage: led [on/off] [1/2/3/4]\r\n");               
  97.                 }
  98.         }
  99. }


  100. #ifdef NR_SHELL_USING_EXPORT_CMD
  101. NR_SHELL_CMD_EXPORT(ls, shell_ls_cmd);
  102. NR_SHELL_CMD_EXPORT(test, shell_test_cmd);
  103. NR_SHELL_CMD_EXPORT(led, shell_led_cmd);


  104. #else
  105. const static_cmd_st static_cmd[] =
  106.         {
  107.                 {"ls", shell_ls_cmd},
  108.                 {"test", shell_test_cmd},
  109.                 {"led", shell_led_cmd},
  110.                
  111.                 {"\0", NULL}
  112.         };
  113.                
  114.                
  115. #endif
  1. /*=============================================================================
  2. // File Name:
  3. // Author:
  4. // Date:
  5. // Version:

  6. =============================================================================*/
  7. /* Includes -----------------------------------------------------------------*/
  8. #include "print.h"
  9. #include "sys.h"


  10. /********************************************************************************************************
  11. **º¯ÊýÐÅÏ¢ UartInit_Loop(void)                     
  12. **¹¦ÄÜÃèÊö £º³õʼ»¯´®¿Ú
  13. **ÊäÈë²ÎÊý £ºÎÞ
  14. **Êä³ö²ÎÊý £ºÎÞ
  15. ********************************************************************************************************/
  16. void Uart1_Init(u32 boaud)
  17. {
  18.     //GPIO¶Ë¿ÚÉèÖà        
  19.     RCC->AHBENR  |= 0x00000001<<17;   //ʹÄÜGPIOA¿ÚʱÖÓ  
  20.     RCC->APB2ENR |= 0x00000001<<14;  //ʹÄÜ´®¿ÚʱÖÓ

  21.     RCC->APB2RSTR |= 1<<14;   //????1
  22.     RCC->APB2RSTR &= ~(1<<14);//????        
  23.         
  24.         //
  25.     GPIOA->CRH &= 0XFFFFF00F;//IO״̬ÉèÖÃ
  26.     GPIOA->CRH |= 0X00000890;//IO״̬ÉèÖÃ
  27.         
  28.         //IO¸´Óù¦ÄÜ
  29.     GPIOA->AFRH &= 0xfffff00f;
  30.     GPIOA->AFRH |= 0x00000110;   
  31.    
  32.     //UART ³õʼ»¯ÉèÖà       
  33.     UART1->BRR  = (SystemCoreClock / 16) /(boaud);
  34.     UART1->FRA  = (SystemCoreClock / 16) %(boaud);
  35.     UART1->CCR |= 0x30; //110000
  36.     UART1->GCR |= 0x19;  //11001;//ʹÄÜ´®¿Ú1                  

  37. }

  38. void Uart1_Send(u8 ch)
  39. {
  40.     while((UART1->CSR & ((uint16_t)0x0001))==0);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï
  41.     UART1->TDR = (ch & (uint16_t)0x00FF);
  42. }

  43. u8 Uart1_Recv(void)
  44. {
  45.         u8 ch;
  46.     while((UART1->CSR & ((uint16_t)0x0002))==0);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï
  47.     ch = UART1->RDR & 0xFF;
  48.         return ch;
  49. }


  50. void Uart2_Init(u32 boaud)
  51. {
  52.     //GPIO¶Ë¿ÚÉèÖà        PA2=TX2,PA3=RX2
  53.     RCC->AHBENR  |= 0x00000001<<17;           //ʹÄÜGPIOA¿ÚʱÖÓ  
  54.     RCC->APB1ENR |= 0x00000001<<17;          //ʹÄÜ´®¿Ú2ʱÖÓ

  55.     RCC->APB1RSTR |= 1<<17;           //????1
  56.     RCC->APB1RSTR &= ~(1<<17);        //????        
  57.         
  58.         //
  59.     GPIOA->CRL &= 0XFFFF00FF;//IO״̬ÉèÖÃ
  60.     GPIOA->CRL |= 0X00008900;//IO״̬ÉèÖÃ
  61.         
  62.         //IO¸´Óù¦ÄÜUART2
  63.     GPIOA->AFRL &= 0xffff00ff;
  64.     GPIOA->AFRL |= 0x00001100;   
  65.    
  66.     //UART ³õʼ»¯ÉèÖà       APB1ʱÖÓÊÇϵͳʱÖÓ2·ÖƵ¡£
  67.     UART2->BRR  = ((SystemCoreClock/2) / 16) /(boaud);
  68.     UART2->FRA  = ((SystemCoreClock/2) / 16) %(boaud);
  69.     UART2->CCR |= 0x30; //110000
  70.     UART2->GCR |= 0x19;  //11001;//ʹÄÜ´®¿Ú2                  

  71. }

  72. void Uart2_Send(u8 ch)
  73. {
  74.     while((UART2->CSR & ((uint16_t)0x0001))==0);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï
  75.     UART2->TDR = (ch & (uint16_t)0x00FF);
  76. }

  77. u8 Uart2_Recv(void)
  78. {
  79.         u8 ch;
  80.     while((UART2->CSR & ((uint16_t)0x0002))==0);//Ñ­»··¢ËÍ,Ö±µ½·¢ËÍÍê±Ï
  81.     ch = UART2->RDR & 0xFF;
  82.         return ch;
  83. }

  84. #ifdef __GNUC__
  85. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  86. #else
  87. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

  88. #endif


  89. #ifdef USE_IAR
  90. PUTCHAR_PROTOTYPE
  91. {
  92.     Uart1_Send(ch & (uint16_t)0x00FF);      
  93.     return ch;
  94. }

  95. #else
  96. #pragma import(__use_no_semihosting)            
  97. //±ê×¼¿âÐèÒªµÄÖ§³Öº¯Êý                 
  98. struct __FILE
  99. {
  100.     int handle;
  101.    
  102. };

  103. FILE __stdout;      
  104. //¶¨Òå_sys_exit()ÒÔ±ÜÃâʹÓðëÖ÷»úģʽ   
  105. void _sys_exit(int x)
  106. {
  107.     x = x;
  108. }

  109. //ÖØ¶¨Òåfputcº¯Êý
  110. PUTCHAR_PROTOTYPE
  111. {     
  112.     Uart1_Send(ch & (uint16_t)0x00FF);      
  113.     return ch;        
  114. }
  115. #endif


  1. int main(void)
  2. {
  3.         u8 ch;
  4.         
  5.     Delay_Init();
  6.     LED_Init();                                   
  7.         Uart1_Init(115200);
  8.         Uart2_Init(115200);
  9.         shell_init();            /* nr_micro_shell*/
  10.                
  11.     while(1)
  12.     {
  13.                 ch = Uart1_Recv();
  14.         shell(ch);
  15.     }
  16. }


QQ截图20200425154452.jpg



QQ图片20200425161330.gif

工程:
游客,如果您要查看本帖隐藏内容请回复

jiekou001 发表于 2020-4-25 19:18 | 显示全部楼层
工程分享一下啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

4784

帖子

28

粉丝
快速回复 返回顶部 返回列表