历史上的今天
返回首页

历史上的今天

今天是:2024年09月20日(星期五)

正在发生

2018年09月20日 | stm32f407之MyDebugger(操作寄存器)

2018-09-20 来源:eefocus

九、MyDebugger

         已经学习了usart和DMA,因为后面的学习,最好有一个直观点的人性化的显示终端。可以通过串口将数据和文字信息发送往电脑,然后在上位机软件上观察数据以及调试信息。为此,我写了一个文件,以供日后调试之用,命名为MyDebugger。

         首先,参照之前的程序,略加修改,将USART的接收功能全部去掉,DMA的配置分开,独立写成一个配置DMA的函数USART3_DMA_config(),把发送的部分写到MyDebugger_Message(char *str_address, unsigned int str_len)函数内,很简单地实现了一个发送字符消息的函数。然后写一个操作板子上指示灯的函数,用以日后指示调试信息。具体的实现,请看下程序(实现MyDebugger的验证程序)。

         把验证程序分离写成头文件形式。方便以后其他工程使用。把程序稍作修改,利用条件编译,为以后可能的添加其他通信方式提供方便。要使用USART3作为调试通信方式,必须先定义宏MyDebug_with_USART3,如下图所示:


实现MyDebugger的验证程序:

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

    标题:MyDebugger  

    软件平台:IAR for ARM6.21  

    硬件平台:stm32f4-discovery  

    主频:168M  

      

    描述:实现一个调试工具  

            

    author:小船  

    data:2012-02-04  

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

#include   

#include  

  

/******LED宏定义*******/  

#define green 0x00001000  

#define orange 0x00002000  

#define red 0x00004000  

#define blue 0x00008000  

  

/******全局变量及类型声明*******/  

bool USART_DMA_Completed;  

enum LED_State {on, off, turn};  

  

/******函数声明*******/  

void LEDs_Init(void);  

void USART3_DMA_config(void);  

void USART3_config(void);  

bool MyDebugger_Message(char *str_address, unsigned int str_len);  

void MyDebugger_LEDs(uint32_t LED, enum LED_State state);  

  

void main ()  

{   

  SysTick_Config(SystemCoreClock / 1000); //设置systemtick一毫秒中断  

  SCB->AIRCR = 0x05FA0000 | 0x400;  //中断优先级分组 抢占:响应=3:1  

  LEDs_Init();  

  USART3_DMA_config();  

  USART3_config();  

    

  USART_DMA_Completed = 1;  

    

  while(1)  

  {   

    MyDebugger_Message("My name is Xian Yongwen\n",   

                            sizeof("My name is Xian Yongwen\n")/sizeof(char));  

      

    MyDebugger_Message("广东石油化工学院\n",   

                            sizeof("广东石油化工学院\n")/sizeof(char));  

  }  

}  

  

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

  函数名:MyDebugger_Message  

  参数:char *str_address  :要发送的字符串地址  

        unsigned int str_len  :字符串的长度  

  返回值:bool  是否操作成功  

  功能:通过USART3发送信息  

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

bool MyDebugger_Message(char *str_address, unsigned int str_len)  

{   

    if( USART_DMA_Completed )  //之前数据已经发送完成  

    {    

      DMA1_Stream3->CR &= 0xFFFFFFFE;   //除能DMA1_Stream3  

      while(DMA1_Stream3->CR & 0x00000001); //确保DMA可以被设置       

      DMA1->LIFCR |= 0x0f800000;  //传送前清空DMA1_Stream3所有中断标志    

      DMA1_Stream3->M0AR = (uint32_t)str_address; //设置内存地址  

      if((USART3->SR & (1<<7))) //发送数据寄存器空  

      {  

        USART3->CR3 &= ~(1<<7);//usart3 dma发送模式除能  

        USART_DMA_Completed = 0;  

        DMA1_Stream3->NDTR = str_len; //设置dma传输数据的数量  

        DMA1_Stream3->CR |= 1;//使能dma  

        USART3->CR3 |= (1<<7);//usart3 dma发送模式使能  

        return true;  

      }   

    }   

    return false;  

}  

  

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

  函数名:MyDebugger_LEDs  

  参数:uint32_t LED  :要操作哪些LED  

        enum LED_State state  :作何操作  

  返回值:无  

  功能:改变LED的状态  

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

void MyDebugger_LEDs(uint32_t LED, enum LED_State state)  

{  

  uint32_t tmp;  

  switch (state)  

  {  

    case on:  

      {  

        GPIOD->BSRRL |= LED;   

        break;  

      }  

    case off:  

      {  

        GPIOD->BSRRH |= LED;  

        break;  

      }  

    case turn:  

      {  

        tmp = (~GPIOD->ODR) & LED;     

        GPIOD->ODR &= ~LED;  

        GPIOD->ODR |= tmp;  

        break;  

      }   

  }  

}  

  

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

  函数名:USART3_DMA_config  

  参数:无  

  返回值:无  

  功能:DMA1数据流3与usart3关联的相关配置  

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

void USART3_DMA_config(void)  

{  

  RCC->AHB1ENR |= (1<<21); //使能DMA1时钟  

  DMA1_Stream3->CR &= 0xFFFFFFFE; //除能DMA1_Stream3  

  while(DMA1_Stream3->CR & 0x00000001);//确保DMA可以被设置  

    

  DMA1->LIFCR |= 0x0f800000;//传送前清空DMA1_Stream3所有中断标志  

    

  DMA1_Stream3->PAR = (uint32_t)&USART3->DR;//设置外设地址USART3->DR地址0x40004804  

                                             //设置内存地址  

  DMA1_Stream3->FCR &= 0x00000000;  

  DMA1_Stream3->FCR |= (1<<7);//设置fifo  

  /*  

    设置dma通道4,即usart3tx  

    优先级最高  

    传输方向内存到外设  

    内存递增模式  

    传输完成中断使能  

  */  

  DMA1_Stream3->CR |= (0x08000000 | 0x00030000 | (1<<6)  

                       | (1<<10) | (1<<4) | (1<<2)|(1<<1));   

    

  NVIC->IP[14] = 0xA0;  

  NVIC->ISER[0] |= (1<<14);  

    

}  

  

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

  函数名:USART3_config  

  参数:无  

  返回值:无  

  功能:配置usart3  

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

void USART3_config(void)  

{  

  RCC->APB1ENR |= (1<<18);  //使能usart3时钟  

  RCC->AHB1ENR |= 0x00000008; //使能GPIOD时钟  

  USART3->BRR = 0x0000016C;   //波特率115200  

  /*  

   使能usart3  

  usart3发送使能  

  8bit  

  一位停止位  

  无校验  

  */  

  USART3->CR1 |= ( ( 1<<13 ) | ( 1<<3 ) );   

    

  GPIOD->AFR[1] |= 0x00000077;//选择PD8,9复用功能   

    

  GPIOD->MODER &= 0xFFF0FFFF; //设置PD8,9,复用模式  

  GPIOD->MODER |= 0x000A0000;   

      

  GPIOD->OSPEEDR &= 0xFFFCFFFF; //PD8速度50m  

  GPIOD->OSPEEDR |= 0x00020000;  

    

  GPIOD->PUPDR &= 0xFFFCFFFF; //PD8  

  GPIOD->PUPDR |= 0x00010000;  

}  

  

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

  函数名:LEDs_Init  

  参数:无  

  返回值:无  

  功能:初始化板子上的LED  

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

void LEDs_Init(void)  

{  

  RCC->AHB1ENR |= 0x00000008; //使能GPIOD时钟  

    

  GPIOD->MODER &= 0x00FFFFFF; //设置PD12,13,14,15输出  

  GPIOD->MODER |= 0x55000000;   

    

  GPIOD->OTYPER &= 0xFFFF0FFF; //设置PD12,13,14,15推挽输出  

    

  GPIOD->OSPEEDR &= 0x00FFFFFF; //PD12,13,14,15 速度100m  

    

  GPIOD->PUPDR &= 0x00FFFFFF;  //PD12,13,14,15 无上拉无下拉  

    

  GPIOD->BSRRH = 0xf000;  //reset register GPIOx_BSRRH, write only  

                          //set register GPIOx_BSRRL, write only  

}  

  

void DMA1_Stream3_IRQHandler(void)  

{  

  if(DMA1->LISR & 0x08000000)//DMA传输完成  

  {  

    USART_DMA_Completed = 1;  

    DMA1->LIFCR |= 0x08000000;//清除中断标志  

  }  

  if(DMA1->LISR & 0x03000000)     //如果发生传输错误或直接模式错误,亮橙色LED  

  {  

    MyDebugger_LEDs( orange, on);  

    DMA1->LIFCR |= 0x03000000;  

  }  

  if(DMA1->LISR & (1<<22))  //如果发生fifo错误,亮红色指示灯  

  {  

    MyDebugger_LEDs( red, on);  

    DMA1->LIFCR |= (1<<22);  

  }  

}  


实用程序:



头文件:MyDebugger.h


[plain] view plaincopy

// file:MyDebugger.h

#ifndef __MyDebugger_H  

#define __MyDebugger_H  

  

#include   

#include  

  

/******LED宏定义*******/  

#define green 0x00001000  

#define orange 0x00002000  

#define red 0x00004000  

#define blue 0x00008000  

  

/******全局变量及类型声明*******/  

enum LED_State {on, off, turn};  

  

/******函数声明*******/  

void MyDebugger_Init(void);  

bool MyDebugger_Message(char *str_address, unsigned int str_len);  

void MyDebugger_LEDs(uint32_t LED, enum LED_State state);  

  

#endif  



源文件:MyDebugger.c



[plain] view plaincopy

// file:MyDebugger.c  

#include   

  

#ifdef MyDebug_with_USART3  

  

bool USART_DMA_Completed = true;  

  

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

  函数名:USART3_DMA_config  

  参数:无  

  返回值:无  

  功能:DMA1数据流3与usart3关联的相关配置  

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

void USART3_DMA_config(void)  

{  

  RCC->AHB1ENR |= (1<<21); //使能DMA1时钟  

  DMA1_Stream3->CR &= 0xFFFFFFFE; //除能DMA1_Stream3  

  while(DMA1_Stream3->CR & 0x00000001);//确保DMA可以被设置  

    

  DMA1->LIFCR |= 0x0f800000;//传送前清空DMA1_Stream3所有中断标志  

    

  DMA1_Stream3->PAR = (uint32_t)&USART3->DR;//设置外设地址USART3->DR地址0x40004804  

                                             //设置内存地址  

  DMA1_Stream3->FCR &= 0x00000000;  

  DMA1_Stream3->FCR |= (1<<7);//设置fifo  

  /*  

    设置dma通道4,即usart3tx  

    优先级最高  

    传输方向内存到外设  

    内存递增模式  

    传输完成中断使能  

  */  

  DMA1_Stream3->CR |= (0x08000000 | 0x00030000 |   

                        (1<<6) | (1<<10) | (1<<4));   

    

  NVIC->IP[14] = 0xA0;  

  NVIC->ISER[0] |= (1<<14);  

}  

  

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

  函数名:USART3_config  

  参数:无  

  返回值:无  

  功能:配置usart3  

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

void USART3_config(void)  

{  

  RCC->APB1ENR |= (1<<18);  //使能usart3时钟  

  RCC->AHB1ENR |= 0x00000008; //使能GPIOD时钟  

  USART3->BRR = 0x0000016C;   //波特率115200  

  /*  

   使能usart3  

  usart3发送使能  

  8bit  

  一位停止位  

  无校验  

  */  

  USART3->CR1 |= ( ( 1<<13 ) | ( 1<<3 ) );   

    

  GPIOD->AFR[1] |= 0x00000077;//选择PD8,9复用功能   

    

  GPIOD->MODER &= 0xFFF0FFFF; //设置PD8,9,复用模式  

  GPIOD->MODER |= 0x000A0000;   

    

//  GPIOD->OTYPER &= 0xFFFFDFFF; //设置PD9推挽输出  

    

  GPIOD->OSPEEDR &= 0xFFFCFFFF; //PD8速度50m  

  GPIOD->OSPEEDR |= 0x00020000;  

    

  GPIOD->PUPDR &= 0xFFFCFFFF; //PD8  

  GPIOD->PUPDR |= 0x00010000;  

}  

  

void DMA1_Stream3_IRQHandler(void)  

{  

  if(DMA1->LISR & 0x08000000)//DMA传输完成  

  {  

    USART_DMA_Completed = 1;  

    DMA1->LIFCR |= 0x08000000;//清除中断标志  

  }  

}  

#endif  

  

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

  函数名:MyDebugger_Message  

  参数:char *str_address  :要发送的字符串地址  

        unsigned int str_len  :字符串的长度  

  返回值:bool  是否操作成功  

  功能:通过USART3发送信息  

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

bool MyDebugger_Message(char *str_address, unsigned int str_len)  

{     

#ifdef MyDebug_with_USB  

    bool USB_Actioned;  

#endif  

      

#ifdef MyDebug_with_USART3  

    bool USART3_Actioned;  

    if( USART_DMA_Completed )  //之前数据已经发送完成  

    {    

      DMA1_Stream3->CR &= 0xFFFFFFFE;   //除能DMA1_Stream3  

      while(DMA1_Stream3->CR & 0x00000001); //确保DMA可以被设置       

      DMA1->LIFCR |= 0x0f800000;  //传送前清空DMA1_Stream3所有中断标志    

      DMA1_Stream3->M0AR = (uint32_t)str_address; //设置内存地址  

      if((USART3->SR & (1<<7))) //发送数据寄存器空  

      {  

        USART3->CR3 &= ~(1<<7);//usart3 dma发送模式除能  

        USART_DMA_Completed = 0;  

        DMA1_Stream3->NDTR = str_len; //设置dma传输数据的数量  

        DMA1_Stream3->CR |= 1;//使能dma  

        USART3->CR3 |= (1<<7);//usart3 dma发送模式使能  

        USART3_Actioned = 1;  

      }   

    }  

#endif  

      

#ifdef MyDebug_with_USB  

//以后或许实现用USB发送调试信息的代码  

      

       //如果操作USB成功  

        USB_Actioned = 1;  

#endif  

  

#ifdef MyDebug_with_USART3  

  #ifndef MyDebug_with_USB      

    return USART3_Actioned;  

  #endif    

#endif  

  

#ifdef MyDebug_with_USB  

  #ifndef MyDebug_with_USART3      

    return USB_Actioned;  

  #endif    

#endif  

  

#ifdef MyDebug_with_USART3  

  #ifdef MyDebug_with_USB      

    return (USART3_Actioned | USB_Actioned);  

  #endif  

#endif      

}  

  

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

  函数名:LEDs_Init  

  参数:无  

  返回值:无  

  功能:初始化板子上的LED  

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

void LEDs_Init(void)  

{  

  RCC->AHB1ENR |= 0x00000008; //使能GPIOD时钟  

    

  GPIOD->MODER &= 0x00FFFFFF; //设置PD12,13,14,15输出  

  GPIOD->MODER |= 0x55000000;   

    

  GPIOD->OTYPER &= 0xFFFF0FFF; //设置PD12,13,14,15推挽输出  

    

  GPIOD->OSPEEDR &= 0x00FFFFFF; //PD12,13,14,15 速度100m  

    

  GPIOD->PUPDR &= 0x00FFFFFF;  //PD12,13,14,15 无上拉无下拉  

    

  GPIOD->BSRRH = 0xf000;  //reset register GPIOx_BSRRH, write only  

                          //set register GPIOx_BSRRL, write only  

}  

  

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

  函数名:MyDebugger_LEDs  

  参数:uint32_t LED  :要操作哪些LED  

        enum LED_State state  :作何操作  

  返回值:无  

  功能:改变LED的状态  

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

void MyDebugger_LEDs(uint32_t LED, enum LED_State state)  

{  

  uint32_t tmp;  

  switch (state)  

  {  

    case on:  

      {  

        GPIOD->BSRRL |= LED;   

        break;  

      }  

    case off:  

      {  

        GPIOD->BSRRH |= LED;  

        break;  

      }  

    case turn:  

      {  

        tmp = (~GPIOD->ODR) & LED;     

        GPIOD->ODR &= ~LED;  

        GPIOD->ODR |= tmp;  

        break;  

      }   

  }  

}  

  

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

  函数名:MyDebugger_Init  

  参数:无  

  返回值:无  

  功能:初始化MyDebugger  

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

void MyDebugger_Init(void)  

{  

  LEDs_Init();  

    

#ifdef MyDebug_with_USART3  

  USART3_DMA_config();  

  USART3_config();  

#endif  

}  




主程序文件:main.c



[plain] view plaincopy

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

    标题:MyDebugger  

    软件平台:IAR for ARM6.21  

    硬件平台:stm32f4-discovery  

    主频:168M  

      

    描述:实现一个调试工具  

            

    author:小船  

    data:2012-02-04  

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

#include   

#include   

  

uint32_t Gb_TimingDelay;  

  

void Delay(uint32_t nTime);  

  

void main ()  

{   

  SysTick_Config(SystemCoreClock / 1000); //设置systemtick一毫秒中断  

  //char test[15] = {0, 1, 2, 3, 4,  10, 11, 12, 13, 14, 15, 0xfe, 0xf0, 0x07, 0x09};  

  SCB->AIRCR = 0x05AF0000 | 0x400;  //中断优先级分组 抢占:响应=3:1  

  MyDebugger_Init();  

  while(1)  

  {   

    MyDebugger_Message("My name is Xian Yongwen\n\r",   

                            sizeof("My name is Xian Yongwen\n\r")/sizeof(char));  

      

    MyDebugger_LEDs(blue, on);  

    Delay(500);  

      

    MyDebugger_Message("广东石油化工学院\n\r",   

                            sizeof("广东石油化工学院\n\r")/sizeof(char));  

      

    MyDebugger_LEDs(blue, off);  

    Delay(500);  

  }  

}  

  

void Delay(uint32_t nTime)  

{   

  Gb_TimingDelay = nTime;  

  

  while(Gb_TimingDelay != 0);  

}  

  

void SysTick_Handler(void)  

{  

  if (Gb_TimingDelay != 0x00)  

  {   

    Gb_TimingDelay--;  

  }  

}  

运行结果:

推荐阅读

史海拾趣

Hittite Microwave(ADI)公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐中不可或缺的重要设备。从广义上讲,任何与电视机连接的网络终端设备均可视为机顶盒,其发展历程涵盖了从模拟频道增补器到数字卫星、地面及有线电视机顶盒的广泛范畴。而从狭义角度看,机顶盒特指那些具备数字处理能力的设备,如IPTV机顶盒、DVB-S卫星机顶盒、DVB-T地面机顶盒及DVB-C有线电视机顶盒等。

机顶盒的核心功能在于接收并转换数字电视信号,使之能在传统或智能电视上播放。它不仅能接收来自有线电缆、卫星天线及宽带网络的信号,还能提供电子节目指南、网页浏览等增值服务。通过机顶盒,用户能够享受到高清乃至4K超高清的电视节目,体验更为细腻的画面和震撼的音效。此外,机顶盒还具备网络交互能力,支持在线购物、观看网络视频、玩游戏等多元化活动,使电视机从单向接收信息的设备转变为智能互动终端。

随着技术的不断进步,机顶盒正朝着高清化、智能化方向发展。未来,机顶盒将不仅限于基本的信号接收与解码功能,还将融入更多智能推荐、语音识别等先进技术,为用户提供更加个性化、便捷的娱乐体验。总之,机顶盒作为连接电视与互联网的桥梁,正以其丰富的功能和广泛的应用场景,不断满足用户日益增长的娱乐需求。

Excelitas公司的发展小趣事

随着技术的不断成熟和市场的扩大,Excelitas公司开始寻求全球扩张。公司先后在北美、欧洲和亚洲设立了研发中心和生产基地,以更好地服务全球客户。在全球扩张的过程中,Excelitas注重本土化战略,积极与当地企业合作,共同开拓市场。这一策略不仅帮助公司快速融入当地市场,还促进了公司业务的持续增长。

AAC [American Accurate Components]公司的发展小趣事

进入21世纪,AAC公司继续加大市场拓展力度。2003年,AAC成功拓展了台湾市场,与明基、仁宝电脑和华宇电脑等知名企业建立了合作关系。为了满足这些客户对高品质耳机的需求,AAC开始生产制造耳机产品。这一创新举措不仅丰富了AAC的产品线,也进一步提升了其在电子消费产品市场的竞争力。

Herley New York公司的发展小趣事

近年来,AAC公司一直致力于技术创新和产品研发。在声学、光学、触感、传感器及半导体等领域,AAC积累了近三十年的技术经验。这些技术积累使得AAC能够不断推出具有创新性和竞争力的新产品。例如,AAC在某次创新峰会上发布了超宽频音质的Opera高低音分频方案、旗舰级体验大众化的声学触觉一体化Combo方案以及安卓触感“天花板级”的仿生振感马达等三大技术新品。这些新品的发布不仅彰显了AAC在电声元器件领域的技术实力,也为智能手机等消费电子行业注入了新的活力。

这五个故事只是AAC公司发展历程中的一部分,但它们足以展现AAC在电子行业中的不断进取和创新精神。从一个合资企业起步,到如今成为全球著名的电声元器件制造商之一,AAC凭借敏锐的市场洞察、坚定的发展决心以及持续的技术创新,在电子行业书写了自己的传奇篇章。

请注意,以上内容仅是基于参考文章的事实性描述,并未涉及对AAC公司的任何评价或判断。同时,由于我无法获取AAC公司的实时信息,因此以上内容可能与AAC公司的最新发展情况有所出入。如需了解更多关于AAC公司的最新信息,建议查阅相关新闻或访问AAC公司官方网站。

Control Sciences Inc公司的发展小趣事

Control Sciences Inc深知人才是企业发展的核心。因此,公司一直注重人才培养和引进。公司不仅设立了专门的研发机构,吸引了大批优秀的科研人才,还定期组织员工培训和交流活动,提高团队的整体素质。这些措施使得Control Sciences Inc的团队越来越强大,为公司的发展提供了有力的人才保障。

Floeth Electronic Ltd公司的发展小趣事

Control Sciences Inc深知人才是企业发展的核心。因此,公司一直注重人才培养和引进。公司不仅设立了专门的研发机构,吸引了大批优秀的科研人才,还定期组织员工培训和交流活动,提高团队的整体素质。这些措施使得Control Sciences Inc的团队越来越强大,为公司的发展提供了有力的人才保障。

问答坊 | AI 解惑

压缩卡及硬盘录像机常见故障1

压缩卡及硬盘录像机常见故障 在使用PC式的硬盘录像机的过程中,难免会遇到许多诸如死机等突发故障,对于平时工作正常的较新机子而言,其中大多数死机都是软件停止了响应造成的,只要强制关闭了这些停止响应的软件,硬盘录像机即可恢复正常工作,方 ...…

查看全部问答>

我用AD6.9设计的原理图问题,大家帮忙看看

错误如下,请问高手如何解决? [Warning] 2812.SCHDOC Compiler Nets Wire AGND has multiple names (Net Label AGND,Net Label G1,Net Label G2,Net Label GND,Net Label VCC) 17:08:30 2008-4-21 1 另外:当光标停留在电源或地符号上时出现提示 ...…

查看全部问答>

【视频分享】赛灵思工程师详解7系列 FPGA

一个全新的FPGA如何确定其功能如何呢?下面看赛灵思测试工程师详解7系列 FPGA:$(\'swf_ziw\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'sr ...…

查看全部问答>

【求】ddk 2600.1106

请问谁有ddk 2600.1106这个版本的ddk,菜鸟初学乍到,往大家多多帮助,谢谢!…

查看全部问答>

关于vxworks的测试

小弟要做vxworks下各个接口的测试,比如串口的传输速率等,要有个定量的结果出来,现在还不知道从哪里下手,希望有这方面经验的人指点一下。…

查看全部问答>

世界500强公司急聘嵌入式开发工程师

-精C++,嵌入式编程,Unix, MFC, Vxworks -工作经验2年以上 -学历要求本科以上 -英语听说读写熟练 -本科学历或以上, 计算机相关专业; -3年以上Linux 软件开发经验; -精通 C++, UML and XML -懂网络编程者优先; -英语熟练,懂日语者优先 ...…

查看全部问答>

求一款无须时钟源输入的计时器IC

还是那个555的。 俺昨天试了试,发现一个问题: 假如输入在20秒的延迟内没有回复到高电平,那么,输出将一直保持高电平...... 也就是说我的想法,没戏。   这时,我想,其实就是一个延时触发么。 假如说还用555,想到的一个方法是,做成 ...…

查看全部问答>

串口中断问题

各位老师:这个程序为什么就是执行不到while里呢?(就是这条GPIO_Write(GPIOD, 0x0700);)单步(F11)的时候可以的,但F10执行职能到NVIC_Configuration(); 到这里就执行不下去了,到不了while里。发送数据4或5都得到现象的(中断是进去了的),为 ...…

查看全部问答>

STM32 Marvell8686 SPI 接口跑WIFI

前几天见看到网友用STM32跑WIFI,觉得这东西很有意思,所以自己也想开始搞一个。由于刚刚开始现在只发送命令扫描无线节点 ,所以想开个帖子记录一下开发过程。虽然还没搞好,但是既然有网友搞通过因此我也还是很有信心的,希望能坚持走下去,同时也 ...…

查看全部问答>

德州仪器(TI)系统软件工程师的一天

TI 软件工程师Moiz专业于移动器件,将带您走进他的工作和生活,感受作为一名软件工程师对TI工作的热忱与喜爱。 $(\'swf_M9r\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allow ...…

查看全部问答>