芯源半导体CW32
直播中

1653051938.373400

12年用户 100经验值
擅长:控制/MCU RF/无线
私信 关注
[经验]

【CW32饭盒派开发板试用体验】自动化设备初步试用

        很开心能在电子发烧论坛参与武汉世源的CW32开发板试用活动,上个月一直想着把试用报告提交了,怎么奈何系统一直在维护中,以至于今天才提交测试报告,先介绍下CW32芯片,CW是ARM Cortex-M0架构的 32 位MCU,拥有64K 字节 FLASH和8K 字节 RAM,最高主频64MHz,拥有5通道的DMA,以及集成了UART,IIC,SPI,ADC等;
      下面开始是用CW32测试的一款自动化设备
f2c4b6cd9a8730fb513fc1148f58f4c.jpg
        其部分代码如下:
  1.    /*
  2.                         系统时钟配置为64M
  3.                         LED1长亮
  4.                         OLED屏显示字符串
  5.                         */
  6.                         #include "main.h"
  7.                         #include "OLED_I2C.h"
  8.                         #include "LCD_calculate.h"
  9.                         #include "Lcd_Driver.h"
  10.                         void GPIO_Configuration(void);
  11.                         void RCC_Configuration(void);
  12.                         void ATIMER_init(void);       
  13.                         #define position1 GPIO_ReadPin(CW_GPIOA,GPIO_PIN_0)
  14.                         #define position2 GPIO_ReadPin(CW_GPIOA,GPIO_PIN_1)
  15.                         #define position3 GPIO_ReadPin(CW_GPIOA,GPIO_PIN_4)
  16.                         #define position4 GPIO_ReadPin(CW_GPIOA,GPIO_PIN_5)
  17.                         #define position5 GPIO_ReadPin(CW_GPIOA,GPIO_PIN_6)
  18.                         #define position6 GPIO_ReadPin(CW_GPIOB,GPIO_PIN_12)
  19.                         #define disable_step         GPIO_WritePin(CW_GPIOB,GPIO_PIN_14,GPIO_Pin_RESET) //拉低;//停止运行
  20.                         #define enable_step         GPIO_WritePin(CW_GPIOB,GPIO_PIN_14,GPIO_Pin_SET) //拉高;//运行
  21.                        
  22. ///////////////////////////////////////////////////////////////////                                                       
  23.                                                                 void delayms(unsigned int x)                 
  24.                                                                 {
  25.                                                                 unsigned char i, j;
  26.                                                                                 i = 18;
  27.                                                                                 j = 147;
  28.                                                                         while(x--)
  29.                                                                         {
  30.                                                                         do
  31.                                                                                 {
  32.                                                                                         while (--j);
  33.                                                                                 } while (--i);
  34.                                                                         }       
  35.                                                         }
  36. ///////////////////////////////////////////////////////////////
  37.                         int main()
  38.                         {       
  39.                                 RCC_Configuration();  //系统时钟64M
  40.                                 GPIO_Configuration(); //LED初始化
  41.                                 Lcd_Init();
  42.                                 Lcd_Clear(BLACK);               //清屏
  43.                                 ATIMER_init();
  44.                                
  45.                                 Gui_DrawFont_GBK16(9,55,WHITE,BLACK,"智 能 贩 卖 鸡");
  46.                                 Gui_DrawFont_GBK16(14,75,WHITE,BLACK," 测 试 系 统 ");
  47.                                
  48.                                 while(1)
  49.                                 {
  50.                                                                            if(position1)
  51.                                                                  {
  52.                                                                   ATIM_Cmd(DISABLE);                //定时器0关,停止计时
  53.                                                        disable_step; //停止
  54.                                                                          delayms(500);//延时5秒
  55.                                                                    ATIM_Cmd(ENABLE);                 //开定时继续运行
  56.                                                              enable_step; //拉高 开始
  57.                                                                          while(position1)//防止重复检测
  58.                                                                           delayms(100);//延时1秒 主要是让电机运转后先跳过检测
  59.                                                                  }
  60.                                                                           else  if(position2)
  61.                                                                  {
  62.                                                                   ATIM_Cmd(DISABLE);                //定时器0关,停止计时
  63.                                                        disable_step; //停止
  64.                                                                          delayms(500);//延时5秒
  65.                                                                    ATIM_Cmd(ENABLE);                 //开定时继续运行
  66.                                                              enable_step; //拉高 开始
  67.                                                                          while(position2)//防止重复检测
  68.                                                                           delayms(100);//延时1秒 主要是让电机运转后先跳过检测
  69.                                                                  }
  70.                                                                            else  if(position3)
  71.                                                                  {
  72.                                                                   ATIM_Cmd(DISABLE);                //定时器0关,停止计时
  73.                                                        disable_step; //停止
  74.                                                                          delayms(500);//延时5秒
  75.                                                                    ATIM_Cmd(ENABLE);                 //开定时继续运行
  76.                                                              enable_step; //拉高 开始
  77.                                                                          while(position3)//防止重复检测
  78.                                                                           delayms(100);//延时1秒 主要是让电机运转后先跳过检测
  79.                                                                  }
  80.                                                                            else  if(position4)
  81.                                                                  {
  82.                                                                   ATIM_Cmd(DISABLE);                //定时器0关,停止计时
  83.                                                        disable_step; //停止
  84.                                                                          delayms(500);//延时5秒
  85.                                                                    ATIM_Cmd(ENABLE);                 //开定时继续运行
  86.                                                              enable_step; //拉高 开始
  87.                                                                          while(position4)//防止重复检测
  88.                                                                           delayms(100);//延时1秒 主要是让电机运转后先跳过检测
  89.                                                                  }
  90.                                                                            else  if(position5)
  91.                                                                  {
  92.                                                                   ATIM_Cmd(DISABLE);                //定时器0关,停止计时
  93.                                                        disable_step; //停止
  94.                                                                          delayms(500);//延时5秒
  95.                                                                    ATIM_Cmd(ENABLE);                 //开定时继续运行
  96.                                                              enable_step; //拉高 开始
  97.                                                                          while(position5)//防止重复检测
  98.                                                                           delayms(100);//延时1秒 主要是让电机运转后先跳过检测
  99.                                                                  }
  100.                                                                            else  if(position6)
  101.                                                                  {
  102.                                                                   ATIM_Cmd(DISABLE);                //定时器0关,停止计时
  103.                                                        disable_step; //停止
  104.                                                                          delayms(500);//延时5秒
  105.                                                                    ATIM_Cmd(ENABLE);                 //开定时继续运行
  106.                                                              enable_step; //拉高 开始
  107.                                                                          while(position6)//防止重复检测
  108.                                                                           delayms(100);//延时1秒 主要是让电机运转后先跳过检测
  109.                                                                  }
  110.                                 }
  111.                         }
  112. ///////////////////////////////////////////////////////////////
  113.                         void RCC_Configuration(void)
  114.                         {
  115.                                 /* 0. HSI使能并校准 */
  116.                                 RCC_HSI_Enable(RCC_HSIOSC_DIV6);
  117.                                 /* 1. 设置HCLK和PCLK的分频系数 */
  118.                                 RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
  119.                                 RCC_PCLKPRS_Config(RCC_PCLK_DIV1);
  120.                                
  121.                                 /* 2. 使能PLL,通过PLL倍频到64MHz */
  122.                                 RCC_PLL_Enable(RCC_PLLSOURCE_HSI, 8000000, 8);     // HSI 默认输出频率8MHz
  123.                          // RCC_PLL_OUT();  //PC13脚输出PLL时钟
  124.                                
  125.                                 ///< 当使用的时钟源HCLK大于24M,小于等于48MHz:设置FLASH 读等待周期为2 cycle
  126.                                 ///< 当使用的时钟源HCLK大于48MHz:设置FLASH 读等待周期为3 cycle
  127.                                 __RCC_FLASH_CLK_ENABLE();
  128.                                 FLASH_SetLatency(FLASH_Latency_3);   
  129.                                        
  130.                                 /* 3. 时钟切换到PLL */
  131.                                 RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL);
  132.                                 RCC_SystemCoreClockUpdate(64000000);       
  133.                                
  134.                         }
  135. ///////////////////////////////////////////////////////////////
  136.                         void GPIO_Configuration(void)
  137.                         {
  138.                                 GPIO_InitTypeDef GPIO_InitStruct;
  139.                                 __RCC_GPIOB_CLK_ENABLE();
  140.                                 __RCC_GPIOC_CLK_ENABLE();
  141.                                 __RCC_GPIOA_CLK_ENABLE();
  142.                                 GPIO_InitStruct.IT = GPIO_IT_NONE;  //input   PA
  143.                                 GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP;
  144.                                 GPIO_InitStruct.Pins = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6;
  145.                                 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  146.                                 GPIO_Init(CW_GPIOA, &GPIO_InitStruct);
  147.         GPIO_InitStruct.IT = GPIO_IT_NONE;  //input  PB
  148.                                 GPIO_InitStruct.Mode = GPIO_MODE_INPUT_PULLUP;
  149.                                 GPIO_InitStruct.Pins = GPIO_PIN_12;
  150.                                 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  151.                                 GPIO_Init(CW_GPIOB, &GPIO_InitStruct);
  152.                                 GPIO_InitStruct.IT = GPIO_IT_NONE; //OUT PB
  153.                                 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  154.                                 GPIO_InitStruct.Pins = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
  155.                                 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  156.                                 GPIO_Init(CW_GPIOB, &GPIO_InitStruct);
  157.                          
  158.                                 GPIO_InitStruct.Pins = GPIO_PIN_13;        //LED4
  159.                                 GPIO_Init(CW_GPIOC, &GPIO_InitStruct);
  160.                                
  161.                                 GPIO_WritePin(CW_GPIOB,GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_Pin_SET);  //拉高
  162.                                
  163.                                 GPIO_WritePin(CW_GPIOC,GPIO_PIN_13,GPIO_Pin_RESET); //拉低
  164.                         }
  165. ///////////////////////////////////////////////////////////////
  166.                         /**
  167.                          * [url=home.php?mod=space&uid=2666770]@Brief[/url] This funcation handles GPIOB
  168.                          */
  169.                         void GPIOB_IRQHandler(void)
  170.                         {
  171.                                 /* USER CODE BEGIN */
  172.                          if (CW_GPIOB->ISR_f.PIN13) //pB13 test interrupt
  173.                                 {
  174.                                         CW_GPIOB->ICR_f.PIN13 = 0; // 清中断标志位
  175.                                         PA07_TOG();       
  176.                                 }
  177.                                 /* USER CODE END */
  178.                         }
  179. ///////////////////////////////////////////////////////////////
  180.                         void ATIMER_init(void)
  181.                         {
  182.                                 ATIM_InitTypeDef ATIM_InitStruct;
  183.                                
  184.                                 __RCC_ATIM_CLK_ENABLE();
  185.                                
  186.                                 __disable_irq();
  187.                                 NVIC_EnableIRQ(ATIM_IRQn);
  188.                                 __enable_irq();
  189.                                
  190.                                 ATIM_InitStruct.BufferState = ENABLE;                               //使能缓存寄存器   
  191.                                 ATIM_InitStruct.ClockSelect = ATIM_CLOCK_PCLK;                      //选择PCLK时钟计数
  192.                                 ATIM_InitStruct.CounterAlignedMode = ATIM_COUNT_MODE_EDGE_ALIGN;    //边沿对齐
  193.                                 ATIM_InitStruct.CounterDirection = ATIM_COUNTING_UP;                //向上计数;
  194.                                 ATIM_InitStruct.CounterOPMode = ATIM_OP_MODE_REPETITIVE;            //连续运行模式
  195.                                 ATIM_InitStruct.OverFlowMask = DISABLE;                             //重复计数器上溢出不屏蔽
  196.                                 ATIM_InitStruct.Prescaler = ATIM_Prescaler_DIV8;                    // 8分频,8MHZ
  197.                                 ATIM_InitStruct.ReloadValue = 8000;                                 // 重载周期 1MS TIMER
  198.                                 ATIM_InitStruct.RepetitionCounter = 0;                              // 重复周期0
  199.                                 ATIM_InitStruct.UnderFlowMask = DISABLE;                            // 重复计数下溢出不屏蔽
  200.                                 ATIM_Init(&ATIM_InitStruct);
  201.                                 ATIM_ITConfig(ATIM_CR_IT_OVE, ENABLE);                              // 有重复计数器溢出产生进入中断
  202.                                 ATIM_Cmd(ENABLE);           
  203.                         }
  204. ///////////////////////////////////////////////////////////////
  205.                         void ATIM_IRQHandler(void)
  206.                         {
  207.                          static unsigned int count=0;
  208.                                 if (ATIM_GetITStatus(ATIM_IT_OVF))
  209.                                 {
  210.                                         ATIM_ClearITPendingBit(ATIM_IT_OVF);
  211.                                         count++;
  212.                                         if(count>=5)//5ms
  213.                                         {
  214.                                                         count=0;
  215.                                                         PB15_TOG();
  216.                                         }
  217.                                 }
  218.                         }
[media]https://www.bilibili.com/video/BV1G841127cQ/?spm_id_from=333.999.0.0&vd_source=c2cdc1b18ffac5c34a98ce5e1d479bc8[/media]

更多回帖

发帖
×
20
完善资料,
赚取积分