这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » fly928sky-ST L053试用进程帖-MDK寄存器版:1、点灯

共4条 1/1 1 跳转至

fly928sky-ST L053试用进程帖-MDK寄存器版:1、点灯

菜鸟
2016-01-04 14:15:16     打赏

板子拿到很久了,可是一直没有时间发帖。。。

之前也是尝试过点灯,可是一直行不通,最后查找硬件和软件问题。

问题分析后,是IO设置的问题,应该设置成推挽输出。(由于之前一直没时间,所以直到今天才重启拿起来试试)


外部STLink的MCO是有输出的,但是我这里是用的HSI。


在主函数while循环中添加断点,单步调试就可以控制LED等的亮灭。


下面贴出代码。

main.c


#include "stm32l0xx.h"
#include "sys.h"
#include "led.h"

int main(void)
{
  SystemCoreClockConfigure(); 
  SystemCoreClockUpdate();
	led_init();
	while(1)
	{
		GPIOA->BSRR = 1 << 5; GPIOA->BRR = 1 << 5; } } 



led.c


#include "led.h"

int 
	led_init(void)
{
	//PA5
	RCC->IOPENR |= 0x0001;
	
	GPIOA->MODER &= ~(0x3 << 10); GPIOA->MODER |= 0x1 << 10; GPIOA->OTYPER &= ~(0x1 << 5); GPIOA->OSPEEDR |= 0x3 << 10; GPIOA->PUPDR &= ~(0x3 << 10); return 0; } 


sys.c


#include "sys.h"

/*----------------------------------------------------------------------------
 * SystemCoreClockConfigure: configure SystemCoreClock using HSI
 *----------------------------------------------------------------------------*/
void 
	SystemCoreClockConfigure(void) 
{
  RCC->CR |= ((uint32_t)RCC_CR_HSION);                     // Enable HSI
  while ((RCC->CR & RCC_CR_HSIRDY) == 0);                  // Wait for HSI Ready

  RCC->CFGR = RCC_CFGR_SW_HSI;                             // HSI is system clock
  while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI);  // Wait for HSI used as system clock

  // PLL configuration: PLLCLK = (HSI * 4)/2 = 32 MHz
  RCC->CFGR &= ~(RCC_CFGR_PLLSRC |
                 RCC_CFGR_PLLMUL |
                 RCC_CFGR_PLLDIV  );
  RCC->CFGR |=  (RCC_CFGR_PLLSRC_HSI |
                 RCC_CFGR_PLLMUL4    |
                 RCC_CFGR_PLLDIV2     );

  FLASH->ACR |= FLASH_ACR_PRFTEN;                          // Enable Prefetch Buffer
  FLASH->ACR |= FLASH_ACR_LATENCY;                         // Flash 1 wait state

  RCC->APB1ENR |= RCC_APB1ENR_PWREN;                       // Enable the PWR APB1 Clock
  PWR->CR = PWR_CR_VOS_0;                                  // Select the Voltage Range 1 (1.8V)
  while((PWR->CSR & PWR_CSR_VOSF) != 0);                   // Wait for Voltage Regulator Ready

  RCC->CFGR |= RCC_CFGR_HPRE_DIV1;                         // HCLK = SYSCLK
  RCC->CFGR |= RCC_CFGR_PPRE1_DIV1;                        // PCLK1 = HCLK
  RCC->CFGR |= RCC_CFGR_PPRE2_DIV1;                        // PCLK2 = HCLK

  RCC->CR &= ~RCC_CR_PLLON;                                // Disable PLL

  RCC->CR |= RCC_CR_PLLON;                                 // Enable PLL
  while((RCC->CR & RCC_CR_PLLRDY) == 0) __NOP();           // Wait till PLL is ready

  RCC->CFGR &= ~RCC_CFGR_SW;                               // Select PLL as system clock source
  RCC->CFGR |=  RCC_CFGR_SW_PLL;
  while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL);  // Wait till PLL is system clock src
}


MDK寄存器版模板见如下附件

led.rar






关键词: L053     MDK寄存器版模板    

菜鸟
2016-01-04 14:23:20     打赏
2楼
我这个模板不需要用到PACK包,对于没有安装PACK包的网友,也可以进行编程、仿真、调试。

助工
2016-01-04 15:08:58     打赏
3楼
楼主继续哟~

院士
2016-01-04 17:25:46     打赏
4楼

直接操作寄存器啊~~

这样会不会很累啊~~


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]