完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include "NuMicro.h" void SYS_Init(void) { /* Set PF multi-function pins for XT1_OUT(PF.2) and XT1_IN(PF.3) */ SYS->GPF_MFPL = (SYS->GPF_MFPL & (~SYS_GPF_MFPL_PF2MFP_Msk)) | SYS_GPF_MFPL_PF2MFP_XT1_OUT; SYS->GPF_MFPL = (SYS->GPF_MFPL & (~SYS_GPF_MFPL_PF3MFP_Msk)) | SYS_GPF_MFPL_PF3MFP_XT1_IN; /*---------------------------------------------------------------------------------------------------------*/ /* Init System Clock */ /*---------------------------------------------------------------------------------------------------------*/ /* Enable HIRC clock */ CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk); /* Wait for HIRC clock ready */ CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk); /* Select HCLK clock source as HIRC and HCLK clock divider as 1 */ CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1)); /* Enable HXT clock */ CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk); /* Wait for HXT clock ready */ CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk); /* Enable PLL */ CLK->PLLCTL = CLK_PLLCTL_128MHz_HIRC; /* Waiting for PLL stable */ CLK_WaitClockReady(CLK_STATUS_PLLSTB_Msk); /* Select HCLK clock source as PLL and HCLK source divider as 2 */ CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_PLL, CLK_CLKDIV0_HCLK(2)); /* Enable UART module clock */ CLK_EnableModuleClock(UART0_MODULE); /* Select UART module clock source as HIRC and UART module clock divider as 1 */ CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HIRC, CLK_CLKDIV0_UART0(1)); /*---------------------------------------------------------------------------------------------------------*/ /* Init I/O Multi-function */ /*---------------------------------------------------------------------------------------------------------*/ /* Set multi-function pins for UART0 RXD and TXD */ SYS->GPB_MFPH = (SYS->GPB_MFPH & (~(UART0_RXD_PB12_Msk | UART0_TXD_PB13_Msk))) | UART0_RXD_PB12 | UART0_TXD_PB13; } void UART0_Init(void) { /*---------------------------------------------------------------------------------------------------------*/ /* Init UART */ /*---------------------------------------------------------------------------------------------------------*/ /* Reset UART0 */ SYS_ResetModule(UART0_RST); /* Configure UART0 and set UART0 baud rate */ UART_Open(UART0, 115200); } void blink1(void) { static int i=0; i++; CLK_SysTickDelay(1000000); printf("%d\n",i); } void blink2(void) { CLK_SysTickDelay(500000); GPIO_TOGGLE(PB10); } void blink3(void) { CLK_SysTickDelay(100000); GPIO_TOGGLE(PB10); } /*---------------------------------------------------------------------------------------------------------*/ /* Main Function */ /*---------------------------------------------------------------------------------------------------------*/ int32_t main(void) { void (*blink)(void); blink=blink1; /* Unlock protected registers */ SYS_UnlockReg(); /* Init System, peripheral clock and multi-function I/O */ SYS_Init(); /* Lock protected registers */ SYS_LockReg(); /* Init UART0 for printf */ UART0_Init(); printf("\n\nCPU @ %dHz\n", SystemCoreClock); printf("+-------------------------------------------------+\n"); printf("| PB.10(Output) and PG.4(Input) Sample Code |\n"); printf("+-------------------------------------------------+\n\n"); /*-----------------------------------------------------------------------------------------------------*/ /* GPIO Basic Mode Test --- Use Pin Data Input/Output to control GPIO pin */ /*-----------------------------------------------------------------------------------------------------*/ printf(" >> LED at PB.10 ; Button1 at PG.4 \n"); /* Configure PB.10 as Output mode and PG.4 as Input mode then close it */ GPIO_SetMode(PB, BIT10, GPIO_MODE_OUTPUT); GPIO_SetMode(PG, BIT4, GPIO_MODE_INPUT); PB10 = 1; printf("GPIO PB.10(output mode) and PD.7(input mode) ......"); while(1) { blink(); if(PG4==0) { CLK_SysTickDelay(50); while(PG4==0){} { if (blink==blink1) blink=blink2; else if(blink==blink2) blink=blink3; else if(blink==blink3) blink=blink1; } } } } 初始化的时候我让blink指向了blink1,但是如果我删除blink1中的内容,那么按键操作后发现无法切换回什么都不做的blink1,如果我给blink1填充一些内容,比如上面代码中打印一些编号。 |
|
相关推荐
1个回答
|
|
空函数无法通过指针切换回来的原因是因为空函数不具有任何实际的操作,只是一个空的函数定义,无法在函数内部做出任何的修改操作。因此,在执行指针切换时,无法通过空函数来改变指针所指向的函数,从而导致失败。
|
|
|
|
只有小组成员才能发言,加入小组>>
698 浏览 0 评论
1109 浏览 1 评论
2476 浏览 5 评论
2810 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2653 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
655浏览 9评论
651浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
783浏览 6评论
631浏览 5评论
671浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 15:57 , Processed in 1.129183 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号