我爱下载

  • 2019-01-02
  • 回复了主题帖: 助力EEWorld 19成长计划,赢取精美好礼!

    “我要助力EEWorld 19成长计划” 助力EEWorld成长目标任务: 连续一个月活跃在论坛(活跃行为包括:发帖,回帖,日志,发表心情,添加好友,好友互动,分享文章,参加活动,上传下载资源,发布和观看视频等系列行为)

  • 2018-12-06
  • 加入了学习《DIY》,观看 编程玩具DIY

  • 2018-11-30
  • 加入了学习《泰克MSO5示波器拆机视频》,观看 泰克MSO5示波器拆机视频

  • 2018-11-29
  • 回复了主题帖: 【颁奖】新驱动力MM32开发板测评活动

    信息已经确认,无误。 谢谢论坛和新驱动力组织的活动。

  • 2018-10-22
  • 发表了主题帖: 新驱动力MM32F031开发板评测:外设PWM和UART的使用

    本帖最后由 我爱下载 于 2018-10-22 13:45 编辑 外设单元pwm和uart的使用评测 测试pwm和uart外设单元,程序依据例程中TIM的PWM例程修改得到,评测主要内容为Uart作为标准输入输出外设接受用户的控制命令,打印程序运行状态,控制pwm按照设计要求改变占空比。Pwm设计为10KHz固定频率可变占空比方式输出,利用TIM3输出端子为PB4,占空比调整范围0%~100%。 对PWM初始化的理解: 对UART的修改: 在官方代码的基础上增加了输入获取功能,支持kbhit()和getchar() 添加如下代码://重定向fgetc函数 int fgetc(FILE*f) {          while((UART1->CSR&UART_IT_RXIEN)==0);     return (UART1->RDR & 0x00ff); } int kbhit(void) {     if((UART1->CSR&UART_IT_RXIEN)==0)               return 0;        else return 1; } 复制代码 主程序代码的修改: while(1)           {               ledflushcount++;               if(ledflushcount >= 100000)               {                      ledflushcount = 0;                      D2_TOGGLE();               }               if(kbhit())               {                      key = getchar();                      switch(key)                      {                             case 'a':                                {                                    if(led0pwmval < 100)                                           led0pwmval += 10;                                    pwmtarget = PWM_PERCEND(led0pwmval);                             }                             break;                             case 's':                             {                                    if(led0pwmval >= 10)                                           led0pwmval -= 10;                                    pwmtarget = PWM_PERCEND(led0pwmval);                             }                             break;                      }                      printf("PWM PER = %d %%\n", led0pwmval);                                     }               if(pwmtarget != pwmcurrent)               {                      if(pwmtarget > pwmcurrent)                             pwmcurrent++;                      else if(pwmtarget < pwmcurrent)                             pwmcurrent--;                      TIM_SetCompare1(TIM3, pwmcurrent);                    }     }       复制代码 执行效果: 通过不断的调大和调小占空比,红色小灯的亮度随着变亮和变暗。 此内容由EEWORLD论坛网友我爱下载原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 2018-10-19
  • 加入了学习《电力电子技术》,观看 逆变失败及其抑制办法

  • 加入了学习《电力电子技术》,观看 整流电路的有源逆变工作状态分析

  • 加入了学习《电力电子技术》,观看 谐波和功率因数

  • 加入了学习《电力电子技术》,观看 电容滤波的不可控整流分析

  • 加入了学习《电力电子技术》,观看 变压器漏感对整流电路的影响

  • 加入了学习《电力电子技术》,观看 反电动势负载的工作情况

  • 加入了学习《电力电子技术》,观看 三相全控桥式整流换流过程分析

  • 加入了学习《电力电子技术》,观看 三相桥式全控整流电路输出电压分析

  • 加入了学习《电力电子技术》,观看 三相半波可控整流电路换流过程分析

  • 加入了学习《电力电子技术》,观看 单相桥式半控整流电路换流分析

  • 加入了学习《电力电子技术》,观看 晶闸管的半控性分析

  • 加入了学习《电力电子技术》,观看 电力电子器件的发展与创新

  • 加入了学习《电力电子技术》,观看 主要电力电子器件特点

  • 2018-10-18
  • 回复了主题帖: [原创] 新驱动力MM32F031开发板评测3:发现和修正MM32F031库中的bug

    本帖最后由 我爱下载 于 2018-10-18 16:28 编辑 之前由于没有充分理解库函数中GPIO_PinAFConfig的使用方法,因此将GPIO_PinSource的使用方法理解错误了,导致分析的一部分是有问题,已经将错误部分删除,但是剩下的部分我认为依然存在问题,因此保留了,希望大家批评指正。

  • 发表了主题帖: [原创] 新驱动力MM32F031开发板评测3:发现和修正MM32F031库中的bug

    本帖最后由 我爱下载 于 2018-10-18 16:30 编辑 库函数bug更改——GPIO_PinAFConfig() 在调试PWM输出函数过程中,发现一处MM32F031库函数的bug。样例代码库中TIM3_PWM_OUTPUT例程中使用的代码如下: //PWM输出初始化 //arr:自动重装值 //psc:时钟预分频数 void TIM3_PWM_Init(u16 arr,u16 psc) {       GPIO_InitTypeDef GPIO_InitStructure;     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;     TIM_OCInitTypeDef  TIM_OCInitStructure;         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);  //&iquest;&ordf;&AElig;&ocirc;GPIOB&Ecirc;±&Ouml;&Oacute;         //SYSCFG->CFGR|=0x1<<11;    GPIOB->AFRL=0x10000;   //大家注意这条为寄存器操作方式     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //TIM3_CH1     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //&cedil;&acute;&Oacute;&Atilde;&Iacute;&AElig;&Iacute;ì&Ecirc;&auml;&sup3;&ouml;     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     GPIO_Init(GPIOB, &GPIO_InitStructure);    。。。 。。。     } 这里大家注意到 GPIOB->AFRL = 0x10000;这行代码采用了寄存器操作方式,而不是函数库操作方式,感觉非常不协调,于是我改成HAL_gpio库中提供的函数 void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF) 经过测试,使用GPIO_PinAFConfig()函数后,PWM的输出就消失了。如下为源库文件中函数代码: /** 注释省略 */ void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF) {     uint32_t temp = 0x00;     uint32_t temp_2 = 0x00;         /* Check the parameters */     assert_param(IS_GPIO_ALL_PERIPH(GPIOx));     assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));     assert_param(IS_GPIO_AF(GPIO_AF));            temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4));     if((GPIO_PinSource >> 0x03) ==0)     {         GPIOx->AFRL &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4));         temp_2 = GPIOx->AFRL | temp;         GPIOx->AFRL = temp_2;     }     else     {         GPIOx->AFRH &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4));         temp_2 = GPIOx->AFRH | temp;         GPIOx->AFRH = temp_2;     } } 对照MM32F031的手册中的相关说明,AFRL和AFRH两个寄存器分别负责IO引脚序号为0-7和8-15的IO转换功能的配置,因此上述代码存在如下几处问题。 1、 ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4));该语句用于生成掩码时错误的。 2、temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)); 该语句用于生成统一的IO引脚号0-15的或码也是错误的。 鉴于上述问题,我修改的代码如下两种: 修改如下 void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF) {     uint32_t temp = 0x00;     uint32_t temp_2 = 0x00;         /* Check the parameters */     assert_param(IS_GPIO_ALL_PERIPH(GPIOx));     assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));     assert_param(IS_GPIO_AF(GPIO_AF)); //    temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4));     if((GPIO_PinNum >> 0x03) ==0)     { //        GPIOx->AFRL &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4));          temp = ((uint32_t)(GPIO_AF) << ((uint32_t)GPIO_PinSource * 4));         GPIOx->AFRL &= ~((uint32_t)0xF<< ((uint32_t)GPIO_PinSource * 4));         temp_2 = GPIOx->AFRL | temp;         GPIOx->AFRL = temp_2;     }     else     { //        GPIOx->AFRH &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4));               temp = ((uint32_t)(GPIO_AF) << ((uint32_t)(GPIO_PinSource-8) * 4));         GPIOx->AFRH &= ~((uint32_t)0xF<< ((uint32_t)(GPIO_PinSource-8) * 4));         temp_2 = GPIOx->AFRH | temp;         GPIOx->AFRH = temp_2;     } } 经过测试,修改后代码是有效的。 此内容由EEWORLD论坛网友我爱下载原创,如需转载或用于商业用途需征得作者同意并注明出处

最近访客

< 1/2 >

统计信息

已有161人来访过

  • 芯币:720
  • 好友:3
  • 主题:18
  • 回复:160
  • 课时:--
  • 资源:1

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言