dyc1229 发表于 2022-6-24 21:50

[N32L43X评测]2.IO操作与延时

<p>&nbsp;</p>

<p>开发环境配置好了,就测试一下IO吧,先来个最简单的LedBlink</p>

<p>使用也比较简单,和STM32基本一样</p>

<p>1.先使能GPIO的RCC</p>

<p>RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);</p>

<p>2.配置IO的输入输出</p>

<p>GPIO_InitType GPIO_InitStructure;</p>

<p>GPIO_InitStruct(&amp;GPIO_InitStructure);</p>

<p>GPIO_InitStructure.Pin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = GPIO_PIN_8;</p>

<p>GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA;</p>

<p>GPIO_InitStructure.GPIO_Pull&nbsp;&nbsp;&nbsp; = GPIO_No_Pull;</p>

<p>GPIO_InitStructure.GPIO_Mode&nbsp; = GPIO_Mode_Out_PP;</p>

<p>GPIO_InitPeripheral(GPIOA, &amp;GPIO_InitStructure);</p>

<p>3.IO的高低输出</p>

<p>调用库函数:</p>

<p>输出高:void GPIO_SetBits(GPIO_Module* GPIOx, uint16_t Pin)</p>

<p>输出低:void GPIO_ResetBits(GPIO_Module* GPIOx, uint16_t Pin)</p>

<p>我习惯直接定义宏</p>

<p lang="en-US">#deifne LED_RED_ON()&nbsp;&nbsp;&nbsp; GPIOA-&gt;PBSC=GPIO_PIN_8</p>

<p lang="en-US">#define LED_RED_OFF()&nbsp;&nbsp;&nbsp; GPIOA-&gt;PBC = GPIO_PIN_8</p>

<p lang="en-US">#define LED_RED_Blink()&nbsp;&nbsp;&nbsp; GPIOA-&gt;POD ^= GPIO_PIN_8</p>

<p lang="en-US">&nbsp;</p>

<p>这样IO的输出部分基本就完成了,再加个Delay函数吧</p>

<p lang="en-US">&nbsp;</p>

<pre>
<code>uint32_t fac_us = 0;
uint32_t fac_ms = 0;

void delay_Config(uint32_t sysclk){
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//108/8
        fac_us=sysclk/1000000;              //为系统时钟的1/8,实际上也就是在计算1usSysTick的VAL减的数目
        fac_ms=fac_us*1000;                //代表每个ms需要的systick时钟数,即每毫秒SysTick的VAL减的数目
}

void delay_ms(uint32_t nms)
{                                   
        uint32_t temp;       
       
        SysTick-&gt;LOAD=nms*fac_ms;//时间加载(SysTick-&gt;LOAD为24bit)
        SysTick-&gt;VAL =0x00;         //清空计数器
        SysTick-&gt;CTRL=SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk; ;          //开始倒数
        do
        {
                temp=SysTick-&gt;CTRL;
        }
        while(temp&amp;0x01&amp;&amp;!(temp&amp;(1&lt;&lt;16)));//等待时间到达   
        SysTick-&gt;CTRL &amp;= ~SysTick_CTRL_ENABLE_Msk;
        SysTick-&gt;VAL =0X00;       //清空计数器                 
}
                                   
//延时nus                                                                                    
void delay_us(uint32_t nus)
{               
        uint32_t temp;
       
        SysTick-&gt;LOAD=nus*fac_us; //时间加载                         
        SysTick-&gt;VAL=0x00;      //清空计数器
        SysTick-&gt;CTRL=SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk; ;      //开始倒数        
        do
        {
                temp=SysTick-&gt;CTRL;
        }
        while(temp&amp;0x01&amp;&amp;!(temp&amp;(1&lt;&lt;16)));//等待时间到达   
        SysTick-&gt;CTRL &amp;= ~SysTick_CTRL_ENABLE_Msk;
        SysTick-&gt;VAL =0X00;       //清空计数器       
}</code></pre>

<p>&nbsp;</p>

<p>&nbsp;</p>

lugl4313820 发表于 2022-6-25 00:47

加油、继续精彩评测作品!

freebsder 发表于 2022-6-27 19:52

<p>加油,期待后续精彩。</p>
页: [1]
查看完整版本: [N32L43X评测]2.IO操作与延时