[DemoCode下载] M263开发板点灯

[复制链接]
3492|11
 楼主| zhuomuniao110 发表于 2021-7-13 22:50 | 显示全部楼层 |阅读模式
借到一块M263开发板,第一步先学点灯。折腾了2个小时终于搞清楚了,走起:
开发板的LED在PB10端口,开发板的Button1在PG4端口
接下来就是改写代码了

  1. #include <stdio.h>
  2. #include "NuMicro.h"



  3. void SYS_Init(void)
  4. {

  5.     /* Set PF multi-function pins for XT1_OUT(PF.2) and XT1_IN(PF.3) */
  6.     SYS->GPF_MFPL = (SYS->GPF_MFPL & (~SYS_GPF_MFPL_PF2MFP_Msk)) | SYS_GPF_MFPL_PF2MFP_XT1_OUT;
  7.     SYS->GPF_MFPL = (SYS->GPF_MFPL & (~SYS_GPF_MFPL_PF3MFP_Msk)) | SYS_GPF_MFPL_PF3MFP_XT1_IN;

  8.     /*---------------------------------------------------------------------------------------------------------*/
  9.     /* Init System Clock                                                                                       */
  10.     /*---------------------------------------------------------------------------------------------------------*/

  11.     /* Enable HIRC clock */
  12.     CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);

  13.     /* Wait for HIRC clock ready */
  14.     CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);

  15.     /* Select HCLK clock source as HIRC and HCLK clock divider as 1 */
  16.     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));

  17.     /* Enable HXT clock */
  18.     CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

  19.     /* Wait for HXT clock ready */
  20.     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

  21.     /* Enable PLL */
  22.     CLK->PLLCTL = CLK_PLLCTL_128MHz_HIRC;

  23.     /* Waiting for PLL stable */
  24.     CLK_WaitClockReady(CLK_STATUS_PLLSTB_Msk);

  25.     /* Select HCLK clock source as PLL and HCLK source divider as 2 */
  26.     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_PLL, CLK_CLKDIV0_HCLK(2));

  27.     /* Enable UART module clock */
  28.     CLK_EnableModuleClock(UART0_MODULE);

  29.     /* Select UART module clock source as HIRC and UART module clock divider as 1 */
  30.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HIRC, CLK_CLKDIV0_UART0(1));

  31.     /*---------------------------------------------------------------------------------------------------------*/
  32.     /* Init I/O Multi-function                                                                                 */
  33.     /*---------------------------------------------------------------------------------------------------------*/

  34.     /* Set multi-function pins for UART0 RXD and TXD */
  35.     SYS->GPB_MFPH = (SYS->GPB_MFPH & (~(UART0_RXD_PB12_Msk | UART0_TXD_PB13_Msk))) | UART0_RXD_PB12 | UART0_TXD_PB13;

  36. }

  37. void UART0_Init(void)
  38. {
  39.     /*---------------------------------------------------------------------------------------------------------*/
  40.     /* Init UART                                                                                               */
  41.     /*---------------------------------------------------------------------------------------------------------*/
  42.     /* Reset UART0 */
  43.     SYS_ResetModule(UART0_RST);

  44.     /* Configure UART0 and set UART0 baud rate */
  45.     UART_Open(UART0, 115200);
  46. }





  47. void blink1(void)
  48. {

  49. }

  50. void blink2(void)
  51. {
  52.                 CLK_SysTickDelay(500000);
  53.                 GPIO_TOGGLE(PB10);
  54. }


  55. void blink3(void)
  56. {
  57.                 CLK_SysTickDelay(100000);
  58.                 GPIO_TOGGLE(PB10);
  59. }

  60. /*---------------------------------------------------------------------------------------------------------*/
  61. /*  Main Function                                                                                          */
  62. /*---------------------------------------------------------------------------------------------------------*/
  63. int32_t main(void)
  64. {

  65.                 void (*blink)(void);
  66.                 blink=blink1;


  67.     /* Unlock protected registers */
  68.     SYS_UnlockReg();

  69.     /* Init System, peripheral clock and multi-function I/O */
  70.     SYS_Init();

  71.     /* Lock protected registers */
  72.     SYS_LockReg();

  73.     /* Init UART0 for printf */
  74.     UART0_Init();

  75.     printf("\n\nCPU [url=home.php?mod=space&uid=72445]@[/url] %dHz\n", SystemCoreClock);

  76.     printf("+-------------------------------------------------+\n");
  77.     printf("|    PB.10(Output) and PG.4(Input) Sample Code     |\n");
  78.     printf("+-------------------------------------------------+\n\n");

  79.     /*-----------------------------------------------------------------------------------------------------*/
  80.     /* GPIO Basic Mode Test --- Use Pin Data Input/Output to control GPIO pin                              */
  81.     /*-----------------------------------------------------------------------------------------------------*/
  82.     printf("  >> LED at PB.10 ; Button1 at PG.4 \n");


  83.     /* Configure PB.10 as Output mode and PG.4 as Input mode then close it */
  84.     GPIO_SetMode(PB, BIT10, GPIO_MODE_OUTPUT);
  85.     GPIO_SetMode(PG, BIT4,  GPIO_MODE_INPUT);
  86.     PB10 = 1;

  87.     printf("GPIO PB.10(output mode) and PD.7(input mode) ......");
  88.                
  89.                
  90.         while(1)
  91.         {
  92.                 blink();
  93.                
  94.                 if(PG4==0)
  95.                         {
  96.                                 CLK_SysTickDelay(50);
  97.                                 while(PG4==0);
  98.                                
  99.                                 blink=blink2;
  100.                         }
  101.         }


  102. }

开机后打印一些信息,然后就是进入一个空函数,这个时候LED是不亮的,因为初始化给关闭了。
然后按下Button1,松手后,修改主循环的函数指针到一个闪烁的子函数,接下来就是闪烁了。
同时学会了使用函数指针。
其实就是将函数名换成了(*p)
p为你的指针名字。比如我这里用的blink
然后调用这个指针指向的函数就是 p();
如果有参数就加上参数,如果有返回值,就加上返回值类型,没有就全部用void表示。
xixi2017 发表于 2021-7-13 22:58 | 显示全部楼层
感谢分享,学习一下。
jiekou001 发表于 2021-7-15 16:58 | 显示全部楼层
受益匪浅。。。感谢分析。
jiekou001 发表于 2021-7-15 17:02 | 显示全部楼层
  1. function square(iteratorMaxCount,currentNumber)
  2.    if currentNumber<iteratorMaxCount
  3.    then
  4.       currentNumber = currentNumber+1
  5.    return currentNumber, currentNumber*currentNumber
  6.    end
  7. end

  8. for i,n in square,3,0
  9. do
  10.    print(i,n)
  11. end
mutable 发表于 2021-7-23 16:46 | 显示全部楼层
真不错,棒棒的
734774645 发表于 2021-7-25 21:05 | 显示全部楼层
星星点点。现在代码高亮了,给力。
coshi 发表于 2021-8-13 20:56 | 显示全部楼层
这个是官方开发板吗
tfqi 发表于 2021-8-13 20:59 | 显示全部楼层
能给个开发板的图片吗
wiba 发表于 2021-8-13 21:02 | 显示全部楼层
这个代码写的 好有水平啊
zljiu 发表于 2021-8-13 21:03 | 显示全部楼层
非常简单但是很简约的代码
drer 发表于 2021-8-13 21:05 | 显示全部楼层
新入手的板子两个小时点亮已经很不错了
kiwis66 发表于 2021-8-18 16:13 | 显示全部楼层
这个也是开发板么?能不能给个图片看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

233

主题

3529

帖子

11

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