[原创] 【ufun学习】环境开发搭建

闵丨大   2019-7-21 16:01 楼主

此内容由EEWORLD论坛网友闵丨大原创,如需转载或用于商业用途需征得作者同意并注明出处
  小弟跟着师兄准备全国电赛,师兄让我学习TI公司的MSP430F5529单片机。所以没能及时更新,非常抱歉。另外,当时以为自己下单了ST-Link,今天才发现并没有下单,超级尴尬。下文通过ISP烧写代码的方式到ufun。

  本文根据张先生提供的《uFun快速入门手册》和ufun原理图进行学习。文末会有ufun资料下载链接。

  1.安装KEIL5。

  2.ISP下载:https://www.stmcu.com.cn搜索Flash Loader Demonstrator

图1.bmp

安装完成。

图2.bmp

NEXT

图3.bmp

中文意思:不能识别驱动,请复位你的设备,然后再尝试。

原因:BOOT0没有设置为’1’。用短接片将牛角座上BOOT0脚和VCC_3V3连接。当时忘记短接(捂脸)

图4.bmp

 3.通过ISP烧写代码

 4.例程1—三色LED灯闪烁。1s切换一次颜色。

图5.bmp  5.例程2—PWM控制LED灯闪烁

 

图6.bmp 图7.bmp 图8.bmp

 6.例程3—蜂鸣器控制

图9.bmp 图10.bmp

void BEEP_Init(void)

{

       GPIO_InitTypeDef  GPIO_InitStructure;

      

       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);   //ʹÄÜPA¶Ë¿ÚʱÖÓ

      

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                                 //·äÃùÆ÷Òý½Å¶¨Òå

       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //ÍÆÍìÊä³ö

       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

       GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIO

       GPIO_SetBits(GPIOA, GPIO_Pin_8);

}

 

 

 7.例程4—USB串口与PC通讯

 

图11.bmp 图12.bmp

 8.例程5—触摸按钮控制

 8.1按钮控制—俄罗斯方块

图13.bmp

   8.2按钮控制—PWM

问题1:下按键不能够变换颜色。

问题2:按钮长按没反应

 

 9.例程6—ADC采集光敏电阻

图14.bmp

图15.bmp 图16.bmp

问题1:只能16进制显示吗,不直观,若点击文本显示则出现乱码

 


图17.bmp

 10.例程7—三轴加速度传感器

图18.bmp

 总结:资料包提供的7个例程代码每个都烧写到uFun中测试了一遍。存在3个疑惑,本人会尽快弄清楚问题出在哪里。

 具体问题如下:

1.例程5中按钮控制PWM。下按钮不能变换颜色;按钮长按没有反应。

2.例程6中串口通信显示只能是16进制,若切换成文本模式则出现乱码。

本帖最后由 闵丨大 于 2019-7-21 16:41 编辑

回复评论 (5)

由于资料包太大上传不了,只能上传到网盘上。

链接:https://pan.baidu.com/s/1KQevjMgsnW9uC3pZnEwyEg 
提取码:vait 

点赞  2019-7-21 19:00

续上帖两个问题。

1.例程5中按钮控制PWM。下按钮不能变换颜色;按钮长按没有反应。

2.例程6中串口通信显示只能是16进制,若切换成文本模式则出现乱码。

 

问题1已解决。下按钮模式选择是指按键长按有效或短按有效。关键代码如下:

//主函数部分

if(key_value==3)                       //检测到touch2被按下

       {                                         

           if(mode==0)                 //按键模式切换,mode=0为关闭连续按键,mode=1位开启连续按键

           {                                       

              mode=1;                               

              while(TOUCH2);          //如果按键未抬起,阻塞,直到抬起,防止模式跳变

           }                                       

           else                                    

              mode=0;                               

       }  

      

    }  

}

//按键子函数部分

int Key_Scan(int mode)                                                                  //按键扫描函数

{

 

    if(mode==1)                                                                         //按键模式切换,mode为1时长按按键可被多次连续识别,为0时长按按键视为单次按键

   {

      key_up=1;

   }

 

    if(key_up==1&&(TOUCH0==1||TOUCH1==1||TOUCH2==1||TOUCH3==1))//不同的按键被按下返还不同的值

    {

       Delay_Ms(100);

       key_up=0;

       if(TOUCH0 == 1)  

           return 1;

       if(TOUCH1 == 1)  

           return 2;

       if(TOUCH2 == 1)  

           return 3;

       if(TOUCH3 == 1)  

           return 4;

    }

    else if(TOUCH0==0&&TOUCH1==0&&TOUCH2==0&&TOUCH3==0)

    {

       key_up=1;

    }

       return 0;

}

 

问题2….

我想改成显示真实电压值,修改部分如下但不成功,望不吝赐教!

while(1)

    {

       Delay_Ms(100);

       sprintf((char *)dtbuf,"光敏电阻电压值:\r\n");

       ADC_Value_1=(int)ADC_Value*1000;            //ADC_Value值为ADC模块转换后的数值

       ADC_Value_a=(ADC_Value_1/1000)%10;

       ADC_Value_b=(ADC_Value_1/100)%10;

       ADC_Value_c=(ADC_Value_1/10)%10;

       ADC_Value_d=(ADC_Value_1/1)%10;

    //  Usart_SendString( USART1,dtbuf);//将ADC_Value通过USART1发送

       Usart_SendByte( USART1,ADC_Value_a);//个位

       Usart_SendByte( USART1,'.');//

       Usart_SendByte( USART1,ADC_Value_b);//十分位

       Usart_SendByte( USART1,ADC_Value_c);//百分位

       Usart_SendByte( USART1,ADC_Value_d);//千分位

    }

 
 

 

点赞  2019-7-30 10:39

谢谢分享经验,列出了一下踩得坑,学习借鉴。点赞

点赞  2019-7-30 10:56

为什么我移植串口程序的时候,总是乱码,但是用原来的例程烧写进去又没事了呢?

我的总线时钟没配置明白吗?

我看代码里面也没有配置总线时钟的语句呀

很高兴认识大家,请多关照
点赞  2020-3-6 22:48

有的,但是不在主函数内。具体位置我有些记不清了。

点赞  2020-4-17 19:46
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复