历史上的今天
返回首页

历史上的今天

今天是:2025年08月19日(星期二)

正在发生

2021年08月19日 | stm32入门系列程序

2021-08-19 来源:eefocus

折腾了两三天,程序终于下载到了stm32的开发办上面去了。


一开始是因为没有设置正确,同时可能是因为自己使用的MDK和j link驱动的版本太低,所以用MDK下载不进去。


后来将软件更新,采用新的版本,下载进去后却发现好像并没有运行。


原来,每次下载完必须重新启动一下开发板才可以。


为了明白这些道理又浪费了我好几天的时间。总之,还是独自一个人在黑暗中摸索。


废话少说,代码如下:


流水灯

/*******************************************************************************

* File Name          : main.c

* Author             : Wuhan R&D Center, Embest

* Date First Issued  : 08/08/2008

* Description        : Main program body

********************************************************************************/


/* Includes ------------------------------------------------------------------*/

#include "stm32f10x_lib.h"



/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

/* Private macro -------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

#define ADC1_DR_Address    ((u32)0x4001244C)


unsigned short int ADC_ConvertedValue;

GPIO_InitTypeDef GPIO_InitStructure;

ADC_InitTypeDef   ADC_InitStructure;

DMA_InitTypeDef   DMA_InitStructure;

EXTI_InitTypeDef EXTI_InitStructure;

ErrorStatus HSEStartUpStatus;

extern vu32 TimingDelay;

/* Private function prototypes -----------------------------------------------*/

void RCC_Configuration(void);

void NVIC_Configuration(void);

void GPIO_Configuration(void);

void Delay(vu32 nTime);

void SysTick_Configuration(void);

void SetupLED (void) ;

extern void SetupADC    (void);


/* Private functions ---------------------------------------------------------*/


/*******************************************************************************

* Function Name  : main

* Description    : Main program.

* Input          : None

* Output         : None

* Return         : None

*******************************************************************************/

int main(void)

{

#ifdef DEBUG

 debug();

#endif


 /* Configure the system clocks */

 RCC_Configuration();

 SysTick_Configuration();


 /* NVIC Configuration */

 NVIC_Configuration();


 /* Configure the GPIO ports */

 GPIO_Configuration();


 /* Connect EXTI Line9 to PB.9 */

 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);


 /* Configure EXTI Line9 to generate an interrupt on falling edge */  

 EXTI_InitStructure.EXTI_Line = EXTI_Line9;

 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;

 EXTI_InitStructure.EXTI_LineCmd = ENABLE;

 EXTI_Init(&EXTI_InitStructure);


  for(;;)

  {

GPIOC->ODR = 0xfffffc4f;

Delay(80);

GPIOC->ODR = 0xfffffc8f;

Delay(80);

GPIOC->ODR = 0xfffffd0f;

Delay(80);

GPIOC->ODR = 0xfffffe0f;

Delay(80);

}  


}


/*******************************************************************************

* Function Name  : SysTick_Configuration

* Description    : Configures the SysTick to generate an interrupt each 1 millisecond.

* Input          : None

* Output         : None

* Return         : None

*******************************************************************************/

void SysTick_Configuration(void)

{

 /* Select AHB clock(HCLK) as SysTick clock source */

 SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);


 /* Set SysTick Priority to 3 */

 NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 3, 0);


 /* SysTick interrupt each 1ms with HCLK equal to 72MHz */

 SysTick_SetReload(72000);


 /* Enable the SysTick Interrupt */

 SysTick_ITConfig(ENABLE);

}



/*******************************************************************************

* Function Name  : RCC_Configuration

* Description    : Configures the different system clocks.

* Input          : None

* Output         : None

* Return         : None

*******************************************************************************/

void RCC_Configuration(void)

{

 /* RCC system reset(for debug purpose) */

 RCC_DeInit();


 /* Enable HSE */

 RCC_HSEConfig(RCC_HSE_ON);


 /* Wait till HSE is ready */

 HSEStartUpStatus = RCC_WaitForHSEStartUp();


 if(HSEStartUpStatus == SUCCESS)

 {

   /* HCLK = SYSCLK */

   RCC_HCLKConfig(RCC_SYSCLK_Div1);


   /* PCLK2 = HCLK */

   RCC_PCLK2Config(RCC_HCLK_Div1);


   /* PCLK1 = HCLK/2 */

   RCC_PCLK1Config(RCC_HCLK_Div2);


   /* Flash 2 wait state */

   FLASH_SetLatency(FLASH_Latency_2);

   /* Enable Prefetch Buffer */

   FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);


   /* PLLCLK = 8MHz * 9 = 72 MHz */

   RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);


   /* Enable PLL */

   RCC_PLLCmd(ENABLE);


   /* Wait till PLL is ready */

   while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

   {

   }


   /* Select PLL as system clock source */

   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);


   /* Wait till PLL is used as system clock source */

   while(RCC_GetSYSCLKSource() != 0x08)

   {

   }

 }


 /* Enable GPIOB, GPIOC and AFIO clocks */

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |

                        RCC_APB2Periph_AFIO, ENABLE);

}


/*******************************************************************************

* Function Name  : NVIC_Configuration

* Description    : Configures Vector Table base location.

* Input          : None

* Output         : None

* Return         : None

*******************************************************************************/

void NVIC_Configuration(void)

{

NVIC_InitTypeDef NVIC_InitStructure;


#ifdef  VECT_TAB_RAM  

 /* Set the Vector Table base location at 0x20000000 */

 NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

#else  /* VECT_TAB_FLASH  */

 /* Set the Vector Table base location at 0x08000000 */

 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  

#endif


 /* Configure one bit for preemption priority */

 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);


 /* Enable the EXTI9_5 Interrupt */

 NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;

 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

 NVIC_Init(&NVIC_InitStructure);

}



/*******************************************************************************

* Function Name  : GPIO_Configuration

* Description    : Configures the different GPIO ports.

* Input          : None

* Output         : None

* Return         : None

*******************************************************************************/

void GPIO_Configuration(void)

{

 GPIO_InitTypeDef GPIO_InitStructure;


 /* Configure PC. as Output push-pull */

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

 GPIO_Init(GPIOC, &GPIO_InitStructure);


 /* Configure PB9 as input floating (EXTI Line9) */

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

 GPIO_Init(GPIOB, &GPIO_InitStructure);

}



/*******************************************************************************

* Function Name  : Delay

* Description    : Inserts a delay time.

* Input          : nTime: specifies the delay time length, in milliseconds.

* Output         : None

* Return         : None

*******************************************************************************/

void Delay(u32 nTime)

{

 /* Enable the SysTick Counter */

 SysTick_CounterCmd(SysTick_Counter_Enable);


 TimingDelay = nTime;


 while(TimingDelay != 0);


 /* Disable the SysTick Counter */

 SysTick_CounterCmd(SysTick_Counter_Disable);

 /* Clear the SysTick Counter */

 SysTick_CounterCmd(SysTick_Counter_Clear);

}


/*******************************************************************************

* Function Name  : Delay

* Description    : Inserts a delay time.

* Input          : nCount: specifies the delay time length.

* Output         : None

* Return         : None

*******************************************************************************/

/*

void Delay(vu32 nCount)

{

 for(; nCount != 0; nCount--);

}


*/




#ifdef  DEBUG

/*******************************************************************************

* Function Name  : assert_failed

* Description    : Reports the name of the source file and the source line number

*                  where the assert error has occurred.

* Input          : - file: pointer to the source file name

*                  - line: assert error line source number

* Output         : None

* Return         : None

*******************************************************************************/

void assert_failed(u8* file, u32 line)

{

 /* User can add his own implementation to report the file name and line number,

    ex: printf("Wrong parameters value: file %s on line %drn", file, line) */

推荐阅读

史海拾趣

Actel公司的发展小趣事

Actel Corporation 是一家曾经在可编程逻辑器件(FPGA)领域有所建树的公司。以下是该公司发展的五个相关故事:

  1. 公司创立与初期发展: Actel Corporation成立于1985年,总部位于美国加利福尼亚州。公司创始人包括Bernard Vonderschmitt等人,致力于研发和生产可编程逻辑器件。最初,Actel专注于开发用于航空航天和国防应用的高可靠性FPGA芯片,以满足对于高度可靠性和耐辐射性的需求。

  2. 技术创新与产品推出: Actel在FPGA技术领域取得了一系列创新成果。公司引入了基于非挥发性技术(NVCM)的可编程逻辑器件,该技术使得FPGA芯片能够在断电后保持配置状态,具有低功耗、高可靠性等优点。Actel的产品涵盖了不同规模和功耗要求的市场,广泛应用于航空航天、通信、工业控制等领域。

  3. 市场拓展与国际化发展: 随着产品线的不断完善和市场认可度的提升,Actel逐步开拓了国内外市场。公司在美国设立了销售和技术支持中心,并与全球各地的合作伙伴建立了合作关系,进一步拓展了国际业务。Actel的产品远销至欧洲、亚洲等地区,赢得了广泛的市场认可。

  4. 并购与重组: 随着FPGA市场竞争的加剧和市场需求的变化,Actel在发展过程中进行了一系列并购和重组。其中最重要的一次是2010年,Actel被Microsemi Corporation收购,成为其子公司。这一并购使得Actel能够借助Microsemi的资源和实力,进一步提升产品竞争力和市场地位。

  5. 终止品牌: 尽管Actel曾经在FPGA市场取得一定成就,但随着时间的推移和市场竞争的加剧,Actel品牌逐渐退出市场。2012年,Microsemi宣布停止使用Actel品牌,并将其产品线整合到Microsemi旗下,标志着Actel品牌的终结。

宇阳科技(EYANG)公司的发展小趣事

作为电子行业的领军企业之一,宇阳科技始终坚持以创新为驱动的发展战略。公司不断投入研发资金,加强技术团队建设,积极引进先进技术和管理经验。通过持续创新和技术升级,宇阳科技成功推出了多款具有自主知识产权的新型电子元器件产品,并引领了行业潮流。同时,公司还积极参与行业标准制定和技术交流合作等活动,为推动电子行业的发展做出了积极贡献。

以上五个故事梗概概述了宇阳科技在电子行业中的发展历程和主要成就。这些故事不仅展现了公司的技术实力和市场地位,也体现了公司不断创新、追求卓越的发展理念。

Electromagnetic Industries Llp公司的发展小趣事

作为一家有社会责任感的企业,EMI公司不仅关注经济效益的增长,还积极履行社会责任。公司积极参与各种公益活动和社会救助行动,为灾区捐款捐物、支持教育事业等。同时,公司还注重环保和可持续发展,通过引进环保技术和设备、加强废弃物处理等措施降低生产过程中的环境污染。这些行动展现了EMI公司的良好企业形象和社会责任感。

Anixter Inc公司的发展小趣事

在技术创新的同时,EMI公司也注重市场拓展。公司根据市场需求和产品特点,制定了有针对性的营销策略。一方面,公司积极参加国内外各种电子展会和论坛,展示产品和技术实力;另一方面,公司加强与客户的沟通和合作,深入了解客户需求,提供个性化的解决方案。通过这些努力,EMI公司的市场份额不断扩大,品牌影响力也逐渐提升。

广东长利光电(Changli Optoelectronic)公司的发展小趣事

随着公司的发展,广东长利光电逐渐意识到质量管理的重要性。为了提升产品质量,公司决定引进ISO9001质量管理体系。在实施过程中,公司对生产流程进行了全面的梳理和优化,确保了每一个生产环节的严格控制。这一举措不仅提升了产品的合格率,还为公司赢得了更多的客户信任和市场份额。

Advanced Detector Corp公司的发展小趣事

Advanced Detector Corp公司成立于上世纪80年代,由一群热衷于探测器技术研发的科学家和工程师创立。在创立初期,ADC便专注于开发高精度、高灵敏度的探测器技术,以满足当时日益增长的电子测量需求。公司通过持续的技术创新,逐渐在探测器领域取得了突破性的进展,并成功推出了一系列具有竞争力的产品。

问答坊 | AI 解惑

期待各位同仁加入"我们是硬件工程师"群42472485

大家好,为了更欢快的环境,大家共同建设.群42472485…

查看全部问答>

2008黑龙江电子竞赛试题下载

本帖最后由 paulhyde 于 2014-9-15 09:04 编辑 A题 宽带前置放大器电路(本科) B题 运水机器人(本科) C题 无线汉字识别装置(本科) [ 本帖最后由 open82977352 于 2010-2-3 10:46 编辑 ]  …

查看全部问答>

eboot USB下载只能下载NK.NB0文件?

平台上S3C2440的.可以正常的下载用WINCE5.0编译生成的NK.NB0文件,但是在下载NK.BIN文件后,系统却停在EBOOT后不能加载了。哪位大侠有过了解,指点一二,不胜感谢!…

查看全部问答>

关于舵机的编程问题

小弟最近刚学汇编,还是个菜鸟,正在研究舵机,需要用汇编写一点程序驱动舵机转动,到网上找了半天,很少有现成的程序,而且写的很复杂,很难理解,有没有那位大侠帮帮写一点关于驱动舵机的汇编程序示例,顺带稍微的讲解,小弟感激不尽。(我买的舵 ...…

查看全部问答>

make后的问题

在make后,提示出现一个error 请指正错误在哪? 谢谢 [root@localhost qt-serial]# make g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -fno-default-inline -DNO_DEBUG -I/working/qt/qt-2.3.7/include -o hello.o hello.cpp I ...…

查看全部问答>

TQ6410有人搞了吗?

怎么样?资料全吗?…

查看全部问答>

STM32F105串口乱码问题

采用的是STM32F105,串口输入始终是乱码 以下是串口的配置信息 void USART1_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure;     USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructur ...…

查看全部问答>

刚学习ARM 不知道买点什么书看

本人现在研究生阶段,想学习下ARM9,不知道买点什么好一点的书籍,ARM的和LINUX的都需要 求助 求助 求助…

查看全部问答>

简介

1.1       简单说明 Figure 1  msp430f149的内部结构图 1.2       地址分布 Msp430f149存储单元采用的是冯·诺依曼体系结构,即ROM和RAM使用同一组地址。Msp430f149是16位 ...…

查看全部问答>