此内容由EEWORLD论坛网友闵丨大原创,如需转载或用于商业用途需征得作者同意并注明出处
小弟跟着师兄准备全国电赛,师兄让我学习TI公司的MSP430F5529单片机。所以没能及时更新,非常抱歉。另外,当时以为自己下单了ST-Link,今天才发现并没有下单,超级尴尬。下文通过ISP烧写代码的方式到ufun。
本文根据张先生提供的《uFun快速入门手册》和ufun原理图进行学习。文末会有ufun资料下载链接。
1.安装KEIL5。
2.ISP下载:https://www.stmcu.com.cn搜索Flash Loader Demonstrator
安装完成。
NEXT
中文意思:不能识别驱动,请复位你的设备,然后再尝试。
原因:BOOT0没有设置为’1’。用短接片将牛角座上BOOT0脚和VCC_3V3连接。当时忘记短接(捂脸)
3.通过ISP烧写代码
4.例程1—三色LED灯闪烁。1s切换一次颜色。
6.例程3—蜂鸣器控制
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通讯
8.例程5—触摸按钮控制
8.1按钮控制—俄罗斯方块
8.2按钮控制—PWM
问题1:下按键不能够变换颜色。
问题2:按钮长按没反应
9.例程6—ADC采集光敏电阻
问题1:只能16进制显示吗,不直观,若点击文本显示则出现乱码
10.例程7—三轴加速度传感器
总结:资料包提供的7个例程代码每个都烧写到uFun中测试了一遍。存在3个疑惑,本人会尽快弄清楚问题出在哪里。
具体问题如下:
1.例程5中按钮控制PWM。下按钮不能变换颜色;按钮长按没有反应。
2.例程6中串口通信显示只能是16进制,若切换成文本模式则出现乱码。
本帖最后由 闵丨大 于 2019-7-21 16:41 编辑续上帖两个问题。
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);//千分位 } |
谢谢分享经验,列出了一下踩得坑,学习借鉴。点赞