本帖最后由 gaoyang9992006 于 2021-1-28 00:13 编辑
前面的创建工程过程请访问下面的帖子
https://bbs.21ic.com/icview-3068390-1-1.html
接着上面这个帖子,开始要写代码了,这里不用官方例子里做好的那种。
而是从标准库函数出发,自己点灯。
原理图显示是低电平有效,并且在PD13、PD14、PD15三个管脚上。
下面我们以点亮PD13管脚的红色LED为例码代码。
- #include "at32f4xx_gpio.h"
- /*delay variable*/
- static __IO uint32_t fac_us;
- static __IO uint32_t fac_ms;
- /*delay macros*/
- #define STEP_DELAY_MS 50
- void Delay_init()
- {
- /*Config Systick*/
- SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
- fac_us = SystemCoreClock / (1000000U);
- fac_ms = fac_us * (1000U);
- }
- void Delay_ms(u16 nms)
- {
- u32 temp;
- while(nms)
- {
- if(nms > STEP_DELAY_MS)
- {
- SysTick->LOAD = (u32)(STEP_DELAY_MS * fac_ms);
- nms -= STEP_DELAY_MS;
- }
- else
- {
- SysTick->LOAD = (u32)(nms * fac_ms);
- nms = 0;
- }
- SysTick->VAL = 0x00;
- SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
- do
- {
- temp = SysTick->CTRL;
- }while( (temp & 0x01) && !(temp & (1<<16)) );
- SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
- SysTick->VAL = 0X00;
- }
- }
- int main(void)
- {
- //LED2管脚初始化
- GPIO_InitType GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOD, ENABLE);
- GPIO_StructInit(&GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pins =GPIO_Pins_13;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
- GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
- GPIO_Init(GPIOD,&GPIO_InitStructure);
-
- Delay_init();
-
- while(1)
- {
- GPIO_SetBits(GPIOD,GPIO_Pins_13);
- Delay_ms(200);
- GPIO_ResetBits(GPIOD,GPIO_Pins_13);
- Delay_ms(200);
- }
-
- }
就这样,赤裸裸的用标准库函数点了个灯。
新手机没法转GIF图片,就不展示了。
按照该贴开头提到的帖子开发,轻松创建工程,0错误0警告,搞定。
|