[M0] 系统自带延时函数疑问

[复制链接]
1407|4
 楼主| 344864311 发表于 2018-10-9 18:17 | 显示全部楼层 |阅读模式

int main()
{

    ChipInit();              //оƬ³õʼ»¯
    Sample_GPIO_RWInit();  ////GPIO³õʼ»¯
          InitTick(12000000,0);
    while(1)
    {

                          PA0=!PA0; ///IOÊä³ö
                          Delay(1000);
                       
    }
}

采用内部12M 延时 1000MS,输出没有变化 是什么原因。
noctor 发表于 2018-10-10 10:02 | 显示全部楼层
你要看那个注释呀,这个delay是用过了中断进行的,所以需要使能systick的中断:
  1. InitTick(12000000,0);
  2. NVIC_EnableIRQ(SysTick_IRQn);          //你漏了这一行
 楼主| 344864311 发表于 2018-10-10 11:08 | 显示全部楼层
我添加了这行还是不行,你要不试试 做个实验
noctor 发表于 2018-10-10 13:03 | 显示全部楼层
344864311 发表于 2018-10-10 11:08
我添加了这行还是不行,你要不试试 做个实验

我是实测了可以了才告诉你的哦,我把我的测试代码贴出来给你看吧,这是整个main函数,不需要使用Chipinit():



  1. #include "MG32x02z_DRV.H"
  2. #include "MG32x02z__Common_DRV.h"
  3. #include <stdio.h>

  4. typedef uint8_t u8;
  5. typedef uint16_t u16;
  6. typedef uint32_t u32;
  7. typedef uint64_t u64;

  8. void SysTick_Handler(void)
  9. {
  10.     //to do......
  11.         IncTick();
  12. }

  13. //  <h> Delay Period Setting
  14. //  <o0> Clock Prescaler (1~256)  <1-256>
  15. //  <o1> Main Counter (1~256) <1-256>

  16. //if user wants to delay 1ms and CK_TM00_PR is 12MHz.
  17. //The Total clocks is 12M*1ms = 12000.
  18. //User can set "clock prescaler"=100 and "pulse width"=120 .   
  19. #define Simple_Time_Prescaler       100
  20. #define Simple_Time_MainCounter     120
  21. #define URTX URT0

  22. void CSC_Init (void)
  23. {
  24.         CSC_PLL_TyprDef CSC_PLL_CFG;
  25.    
  26.         
  27.   UnProtectModuleReg(MEMprotect);             // Setting flash wait state
  28.   MEM_SetFlashWaitState(MEM_FWAIT_ONE);        // 50MHz> Sysclk >=25MHz
  29.   ProtectModuleReg(MEMprotect);

  30.   UnProtectModuleReg(CSCprotect);
  31.         CSC_CK_APB_Divider_Select(APB_DIV_1);        // Modify CK_APB divider        APB=CK_MAIN/1
  32.         CSC_CK_AHB_Divider_Select(AHB_DIV_1);        // Modify CK_AHB divider        AHB=APB/1

  33.         
  34.         /* CK_HS selection */
  35.         CSC_IHRCO_Select(IHRCO_12MHz);                        // IHRCO Sel 12MHz
  36.         CSC_IHRCO_Cmd(ENABLE);
  37.         while(CSC_GetSingleFlagStatus(CSC_IHRCOF) == DRV_Normal);
  38.         CSC_ClearFlag(CSC_IHRCOF);
  39.         CSC_CK_HS_Select(HS_CK_IHRCO);                        // CK_HS select IHRCO


  40.         /* PLL */
  41.         /**********************************************************/
  42.         CSC_PLL_CFG.InputDivider=PLLI_DIV_2;        // 12M/2=6M
  43.         CSC_PLL_CFG.Multiplication=PLLIx16;                // 6M*16=96M
  44.         CSC_PLL_CFG.OutputDivider=PLLO_DIV_2;        // PLLO=96M/2=48M
  45.         CSC_PLL_Config(&CSC_PLL_CFG);
  46.         CSC_PLL_Cmd(ENABLE);
  47.         while(CSC_GetSingleFlagStatus(CSC_PLLF) == DRV_Normal);
  48.         CSC_ClearFlag(CSC_PLLF);
  49.         /**********************************************************/

  50.         
  51.         /* CK_MAIN */
  52.         CSC_CK_MAIN_Select(MAIN_CK_HS);        


  53.         /* Configure ICKO function */
  54.                
  55.         /* Configure peripheral clock */
  56.         CSC_PeriphProcessClockSource_Config(CSC_UART0_CKS, CK_APB);
  57.          CSC_PeriphOnModeClock_Config(CSC_ON_UART0,ENABLE);
  58.          CSC_PeriphOnModeClock_Config(CSC_ON_PortB,ENABLE);
  59.          CSC_PeriphOnModeClock_Config(CSC_ON_PortC,ENABLE);
  60.          CSC_PeriphOnModeClock_Config(CSC_ON_PortE,ENABLE);
  61.         
  62.         CSC_PeriphProcessClockSource_Config(CSC_I2C0_CKS, CK_APB);
  63.         CSC_PeriphOnModeClock_Config(CSC_ON_I2C0, ENABLE);                                          // Enable IIC0 module clock

  64.          CSC_PeriphOnModeClock_Config(CSC_ON_DMA,ENABLE);
  65.         

  66.     ProtectModuleReg(CSCprotect);
  67. }


  68. void TM00_Delay_Init(void)
  69. {  
  70.     TM_TimeBaseInitTypeDef TM_TimeBase_InitStruct;
  71.     // make sure :
  72.         
  73.     //===Set CSC init====
  74.     //MG32x02z_CSC_Init.h(Configuration Wizard)
  75.     //Select CK_HS source = CK_IHRCO
  76.     //Select IHRCO = 12M
  77.     //Select CK_MAIN Source = CK_HS
  78.     //Configure PLL->Select APB Prescaler = CK_MAIN/1
  79.     //Configure Peripheral On Mode Clock->TM00 = Enable
  80.         
  81.     // ----------------------------------------------------
  82.     // 1.initial TimeBase structure
  83.     TM_TimeBaseStruct_Init(&TM_TimeBase_InitStruct);
  84.    
  85.     // modify parameter
  86.     TM_TimeBase_InitStruct.TM_Period = Simple_Time_MainCounter - 1;
  87.     TM_TimeBase_InitStruct.TM_Prescaler = Simple_Time_Prescaler - 1;
  88.     TM_TimeBase_InitStruct.TM_CounterMode = Cascade;
  89.    
  90.     TM_TimeBase_Init(TM00, &TM_TimeBase_InitStruct);
  91.                
  92.                 TM_ClearFlag(TM00, TMx_TOF);
  93.    
  94.     // ----------------------------------------------------
  95.     // 3.Start TM00
  96.     TM_Timer_Cmd(TM00, ENABLE);

  97.     // ----------------------------------------------------
  98.     // 4.until TOF flag event (polling)
  99.     while(TM_GetSingleFlagStatus(TM00, TMx_TOF) == DRV_UnHappened);
  100.     TM_ClearFlag(TM00, TMx_TOF);        // clear TOF flag
  101. //                TM_Timer_Cmd(TM00, DISABLE);
  102.                
  103. }
  104. void delay_ms(int i)
  105. {
  106.         int x=0;
  107.         for(x=0;x<i;x++)
  108.         {
  109.                 while(TM_GetSingleFlagStatus(TM00, TMx_TOF) == DRV_UnHappened);
  110.     TM_ClearFlag(TM00, TMx_TOF);        // clear TOF flag
  111.         }
  112. }



  113. int fputc(int ch,FILE *f)
  114. {
  115.         
  116.         URT_SetTXData(URTX,1,ch);
  117.         while(URT_GetITSingleFlagStatus(URTX,URT_IT_TC)==DRV_UnHappened);
  118.         URT_ClearITFlag(URTX,URT_IT_TC);
  119.         
  120.         return ch;
  121. }

  122. void UartSendByte(int ch)
  123. {
  124.         
  125.         URT_SetTXData(URTX,1,ch);
  126.         while(URT_GetITSingleFlagStatus(URTX,URT_IT_TC)==DRV_UnHappened);
  127.         URT_ClearITFlag(URTX,URT_IT_TC);
  128.         
  129. }


  130. void URT0_Init(void)
  131. {
  132.     URT_BRG_TypeDef  URT_BRG;
  133.     URT_Data_TypeDef DataDef;
  134.         PIN_InitTypeDef PINX_InitStruct;
  135.    
  136.         //==Set GPIO init
  137.         //PB8 PPO TX ,PB9 ODO RX
  138.         PINX_InitStruct.PINX_Mode                                 = PINX_Mode_PushPull_O;                  // Pin select Push Pull mode
  139.         PINX_InitStruct.PINX_PUResistant                 = PINX_PUResistant_Enable;          // Enable pull up resistor
  140.         PINX_InitStruct.PINX_Speed                                   = PINX_Speed_Low;                        
  141.         PINX_InitStruct.PINX_OUTDrive                         = PINX_OUTDrive_Level0;                 // Pin output driver full strength.
  142.         PINX_InitStruct.PINX_FilterDivider                   = PINX_FilterDivider_Bypass;        // Pin input deglitch filter clock divider bypass
  143.         PINX_InitStruct.PINX_Inverse                         = PINX_Inverse_Disable;                 // Pin input data not inverse
  144.         PINX_InitStruct.PINX_Alternate_Function  = 3;                                // Pin AFS = URT0_TX
  145.         GPIO_PinMode_Config(PINB(8),&PINX_InitStruct);                                                          // TXD at PB8

  146.         PINX_InitStruct.PINX_Mode                                 = PINX_Mode_OpenDrain_O;                 // Pin select Open Drain mode
  147.         PINX_InitStruct.PINX_Alternate_Function  = 3;                                // Pin AFS = URT0_RX
  148.         GPIO_PinMode_Config(PINB(9),&PINX_InitStruct);                                                          // RXD at PB9

  149.    
  150.     //=====Set Clock=====//
  151.     //---Set BaudRate---//
  152.     URT_BRG.URT_InteranlClockSource = URT_BDClock_PROC;
  153.     URT_BRG.URT_BaudRateMode = URT_BDMode_Separated;
  154.     URT_BRG.URT_PrescalerCounterReload = 0;                                //Set PSR
  155.     URT_BRG.URT_BaudRateCounterReload = 3;                                //Set RLR
  156.     URT_BaudRateGenerator_Config(URTX, &URT_BRG);                            //BR115200 = f(CK_URTx)/(PSR+1)/(RLR+1)/(OS_NUM+1)
  157.     URT_BaudRateGenerator_Cmd(URTX, ENABLE);                            //Enable BaudRateGenerator
  158.     //---TX/RX Clock---//
  159.     URT_TXClockSource_Select(URTX, URT_TXClock_Internal);                //URT_TX use BaudRateGenerator
  160.     URT_RXClockSource_Select(URTX, URT_RXClock_Internal);                //URT_RX use BaudRateGenerator
  161.     URT_TXOverSamplingSampleNumber_Select(URTX, 25);                //Set TX OS_NUM
  162.     URT_RXOverSamplingSampleNumber_Select(URTX, 25);                //Set RX OS_NUM
  163.     URT_RXOverSamplingMode_Select(URTX, URT_RXSMP_3TIME);
  164.     URT_TX_Cmd(URTX, ENABLE);                                            //Enable TX
  165.     URT_RX_Cmd(URTX, ENABLE);                                            //Enable RX
  166.    
  167.    

  168.     //=====Set Mode=====//
  169.     //---Set Data character config---//
  170.     DataDef.URT_TX_DataLength  = URT_DataLength_8;
  171.     DataDef.URT_RX_DataLength  = URT_DataLength_8;
  172.     DataDef.URT_TX_DataOrder   = URT_DataTyped_LSB;
  173.     DataDef.URT_RX_DataOrder   = URT_DataTyped_LSB;
  174.     DataDef.URT_TX_Parity      = URT_Parity_No;
  175.     DataDef.URT_RX_Parity      = URT_Parity_No;
  176.     DataDef.URT_TX_StopBits    = URT_StopBits_1_0;
  177.     DataDef.URT_RX_StopBits    = URT_StopBits_1_0;
  178.     DataDef.URT_TX_DataInverse = DISABLE;
  179.     DataDef.URT_RX_DataInverse = DISABLE;
  180.     URT_DataCharacter_Config(URTX, &DataDef);
  181.     //---Set Mode Select---//
  182.     URT_Mode_Select(URTX, URT_URT_mode);
  183.     //---Set DataLine Select---//
  184.     URT_DataLine_Select(URTX, URT_DataLine_2);
  185.    
  186.    
  187.     //=====Set Data Control=====//
  188.     URT_RXShadowBufferThreshold_Select(URTX, URT_RXTH_1BYTE);
  189.     URT_IdlehandleMode_Select(URTX, URT_IDLEMode_No);
  190.     URT_TXGaudTime_Select(URTX, 0);
  191.    
  192.     //=====Enable URT Interrupt=====//
  193.     //URT_IT_Cmd(URTX, URT_IT_RX, ENABLE);
  194.     //URT_ITEA_Cmd(URTX, ENABLE);
  195.     //NVIC_EnableIRQ(URT0_IRQn);

  196.     //=====Enable URT=====//
  197.     URT_Cmd(URTX, ENABLE);
  198.                
  199.         //==See MG32x02z_URT0_IRQ.c when interrupt in
  200. }



  201. int main()
  202. {
  203.         int i;
  204.         PIN_InitTypeDef PINX_InitStruct;
  205.         CSC_Init();
  206.         InitTick(12000000,0);
  207.         NVIC_EnableIRQ(SysTick_IRQn);
  208.         PINX_InitStruct.PINX_Mode                                 = PINX_Mode_PushPull_O;          // Pin select digital input mode
  209.         PINX_InitStruct.PINX_PUResistant                 = PINX_PUResistant_Enable;  // Enable pull up resistor
  210.         PINX_InitStruct.PINX_Speed                                   = PINX_Speed_Low;                        
  211.         PINX_InitStruct.PINX_OUTDrive                         = PINX_OUTDrive_Level0;         // Pin output driver full strength.
  212.         PINX_InitStruct.PINX_FilterDivider                   = PINX_FilterDivider_Bypass;// Pin input deglitch filter clock divider bypass
  213.         PINX_InitStruct.PINX_Inverse                         = PINX_Inverse_Disable;         // Pin input data not inverse
  214.         PINX_InitStruct.PINX_Alternate_Function = 0;                                                 // Pin AFS = 0
  215.   GPIO_PinMode_Config(PINE(15),&PINX_InitStruct);                                          // D6 setup at PE15
  216.         URT0_Init();
  217.         printf("hello\n");

  218.     while(1)
  219.     {
  220.                 PE15=0;
  221.                 Delay(1000);

  222.                 PE15=1;
  223.                 Delay(1000);

  224.     }

  225.                
  226. }




















 楼主| 344864311 发表于 2018-10-10 14:39 | 显示全部楼层
感谢,现在可以了。。。。。。。。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

54

帖子

4

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