X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
创新实验室
[资源共享] STM32圆形遥控器——基础篇
bqgup
2020-4-9 14:24
楼主
# STM32圆形遥控器——基础篇 #### 年前做了5块多功能STM32圆形mini遥控器PCB板,发过一次帖子分享了板子的工程图文件和实物图。现在时间充足,再和大家分享一下分别控制板子的程序。 # STM32圆形遥控器硬件 #### 上次分享了板子工程,有需要的话请大家找找去发工厂做板。 #### [DIY多功能STM32迷你遥控器(附工程文件,可直接做板使用)](https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=1107415&fromuid=1014845 "DIY多功能STM32迷你遥控器(附工程文件,可直接做板使用)")
#### STM32圆形遥控器上集成了STM32核心板,核心板STM32C8T6的原理图如下: ####
MiniSTM32_V3.3_SCH.pdf
(295.16 KB)
(下载次数: 16, 2020-4-9 13:51 上传)
#### 为什么直接用核心板呢?主要是懒,为了缩短研发周期,不用花功夫在PCB上,不用花功夫焊接芯片;芯片烧了可以直接换下来;当然也付出了价格略贵、占用空间大的代价。板子上还集成了稳压电源模块、NRF24L01无线收发模块、摇杆控制模块、OLED显示屏、按键、蜂鸣器、蓝牙等。 #### 程序下载方式采用SWD四线下载。原理图如下:
####
1、stm32圆形遥控器PCB工程.rar
(1.68 MB)
(下载次数: 29, 2020-4-9 13:38 上传)
# stm32圆形遥控器_蜂鸣器+OLED测试 ``` int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组2 delay_init(); //延时函数初始化 uart_init(115200); //默认串口1初始化为115200 JTAG_Set(JTAG_SWD_DISABLE); //关闭JTAG接口 JTAG_Set(SWD_ENABLE); //使能SWD接口 Buzzer_Init(); //蜂鸣器初始化 LED_Init(); //LED初始化 OLED_Init(); //初始化OLED //NRF24L01_init(); //初始化NRF24L01 ADC1_GPIO_Config(); //初始化ADC IO ADC1_Mode_Config(); //初始化ADC模式 // KEY_Init(); //按键初始化 System_Start(); //系统启动,蜂鸣器~滴~ // TIM3_Int_Init(999,71); //1ms定时器中断 while(1) { OLED_ShowCHinese(0,0,0); //中 OLED_ShowCHinese(18,0,1); //景 OLED_ShowCHinese(36,0,2); //园 OLED_ShowCHinese(54,0,3); //电 OLED_ShowCHinese(72,0,4); //子 OLED_ShowCHinese(90,0,5); //科 OLED_ShowCHinese(108,0,6); //技 OLED_ShowString(0,3,"0.96' OLED TEST"); OLED_ShowString(20,6,"2020/04/09"); } } ``` #### 开机上电时遥控器会先发出一声“滴”,然后开始往下执行。执行结果如下:
#### 程序与预期结果相符合,完整工程如下: ####
1、stm32圆形遥控器_蜂鸣器 OLED测试.rar
(5.2 MB)
(下载次数: 33, 2020-4-9 13:55 上传)
# stm32圆形遥控器_定时器+LED测试 ```c int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组2 delay_init(); //延时函数初始化 uart_init(115200); //默认串口1初始化为115200 JTAG_Set(JTAG_SWD_DISABLE); //关闭JTAG接口 JTAG_Set(SWD_ENABLE); //使能SWD接口 Buzzer_Init(); //蜂鸣器初始化 LED_Init(); //LED初始化 OLED_Init(); //初始化OLED //NRF24L01_init(); //初始化NRF24L01 ADC1_GPIO_Config(); //初始化ADC IO ADC1_Mode_Config(); //初始化ADC模式 // KEY_Init(); //按键初始化 System_Start(); //系统启动,蜂鸣器~滴~ TIM3_Int_Init(999,71); //1ms定时器中断 // RC_INIT(); while(1) { OLED_ShowCHinese(0,0,0); //中 OLED_ShowCHinese(18,0,1); //景 OLED_ShowCHinese(36,0,2); //园 OLED_ShowCHinese(54,0,3); //电 OLED_ShowCHinese(72,0,4); //子 OLED_ShowCHinese(90,0,5); //科 OLED_ShowCHinese(108,0,6); //技 OLED_ShowString(0,3,"0.96' OLED TEST"); OLED_ShowString(20,6,"2020/04/09"); } } ``` #### 中断服务函数如下: ```c void TIM3_IRQHandler(void) //TIM3中断 { static u16 i; if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清除TIMx的中断待处理位:TIM 中断源 i++; if(i > 999) { i = 0; LED1 = ~LED1; LED2 = ~LED2; LED3 = ~LED3; } } } ``` #### LED灯一秒反转一次。动态效果图就不展示了。下面附上工程: ####
2、stm32圆形遥控器_定时器 LED测试.rar
(5.21 MB)
(下载次数: 28, 2020-4-9 14:01 上传)
# stm32圆形遥控器_按键测试 ```c //注意此函数有响应优先级,KEY0>KEY1>WK_UP!! /********************************************************************************************** *函数原型:u8 KEY_Scan(u8 mode) *函数功能:按键处理函数 *函数参数:mode:0,不支持连续按;1,支持连续按; *返 回 值: 0,没有任何按键按下;S1_PRES,S1按下;S2_PRES,S2按下 *函数作者:bqgup *完成日期:2017/12/14 *备 注: 注意此函数有响应优先级,S1>S2 **********************************************************************************************/ u8 KEY_Scan(u8 mode) { static u8 key_up=1;//按键按松开标志 if(mode)key_up=1;//支持连按 if(key_up&&(K1==0||K2==0||K3==0||K4==0||KEY_LEFT==0||KEY_RIGHT==0)) { delay_ms(10);//去抖动 key_up=0; if(K1==0)return K1_PRES; else if(K2==0)return K2_PRES; else if(K3==0)return K3_PRES; else if(K4==0)return K4_PRES; else if(KEY_LEFT==0)return KEY_LEFT_PRES; else if(KEY_RIGHT==0)return KEY_RIGHT_PRES; }else if(K1==1&&K2==1&&K3==1&&K4==1&&KEY_LEFT==1&&KEY_RIGHT==1)key_up=1; return 0;// 无按键按下 } ``` ```c int main(void) { u8 key_sta; //按键状态 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组2 delay_init(); //延时函数初始化 uart_init(115200); //默认串口1初始化为115200 JTAG_Set(JTAG_SWD_DISABLE); //关闭JTAG接口 JTAG_Set(SWD_ENABLE); //使能SWD接口 Buzzer_Init(); //蜂鸣器初始化 LED_Init(); //LED初始化 KEY_Init(); //按键初始化 OLED_Init(); //初始化OLED //NRF24L01_init(); //初始化NRF24L01 ADC1_GPIO_Config(); //初始化ADC IO ADC1_Mode_Config(); //初始化ADC模式 //校准摇杆数据初始化 System_Start(); //系统启动,蜂鸣器~滴~ TIM3_Int_Init(999,71); //1ms定时器中断 // RC_INIT(); while(1) { key_sta = KEY_Scan(1); //得到键值 OLED_ShowNum(0,0,key_sta,2,16); //支持连续按 if(key_sta) { if(1 == key_sta) { LED2 = 0; } else if(2 == key_sta) { LED2 = 1; } else if(3 == key_sta) { LED3 = 0; } else if(4 == key_sta) { LED3 = 1; } } OLED_ShowString(0,3,"0.96' OLED TEST"); OLED_ShowString(20,6,"2020/04/09"); } } ``` #### 按键函数支持连按和不连按,根据个人需要改变函数参数,本次测试测试按键是否起作用,规定的按键按下LED会实现规定的亮灭,键值会显示在OLED显示屏上。
#### 简短的显示一下测试效果,下面附上文件工程: ####
3、stm32圆形遥控器_按键测试.rar
(5.2 MB)
(下载次数: 23, 2020-4-9 14:09 上传)
# stm32圆形遥控器_串口测试 ```c /********************************************************************************************** * 函数原型:void Usart_Rec_2MCU(void) * 函数功能:串口接收数据给单片机 * 函数参数:无 * 函数作者:bqgup * 完成时间:2017.12.29 00:14 * 备 注;通过串口调试助手或者外部蓝牙设备发送字头一样的字符串均可被单片机 接收,并按照一定方式译码 **********************************************************************************************/ void Usart_Rec_2MCU(void) { u8 t; u8 len; if(USART_RX_STA&0x8000) //接收中断到来 { len=USART_RX_STA&0x3fff; //得到此次接收到的数据长度 for(t=0;t
DR=USART_RX_BUF[t]; if('S' == USART_RX_BUF[0]) //字头一级校验 { if('a' == USART_RX_BUF[1]) //字头二级校验 { Rec_data1 = (float)((USART_RX_BUF[2] - '0') * 1000 + (USART_RX_BUF[3] - '0') * 100 + (USART_RX_BUF[4] - '0') * 10 + (USART_RX_BUF[5] - '0')) / 100.0; USART_RX_BUF[6] = '\0'; } else if('b' == USART_RX_BUF[1]) { Rec_data2 = (float)((USART_RX_BUF[2] - '0') * 1000 + (USART_RX_BUF[3] - '0') * 100 + (USART_RX_BUF[4] - '0') * 10 + (USART_RX_BUF[5] - '0')) / 100.0; USART_RX_BUF[6] = '\0'; } } while((USART1->SR&0X40)==0); //等待发送结束 } printf("\r\n\r\n"); //插入换行 USART_RX_STA=0; //状态清零 } } ``` ```c int main(void) { u8 key_sta; //按键状态 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组2 delay_init(); //延时函数初始化 uart_init(115200); //默认串口1初始化为115200 JTAG_Set(JTAG_SWD_DISABLE); //关闭JTAG接口 JTAG_Set(SWD_ENABLE); //使能SWD接口 Buzzer_Init(); //蜂鸣器初始化 LED_Init(); //LED初始化 KEY_Init(); //按键初始化 OLED_Init(); //初始化OLED //NRF24L01_init(); //初始化NRF24L01 ADC1_GPIO_Config(); //初始化ADC IO ADC1_Mode_Config(); //初始化ADC模式 //校准摇杆数据初始化 System_Start(); //系统启动,蜂鸣器~滴~ TIM3_Int_Init(999,71); //1ms定时器中断 // RC_INIT(); while(1) { Usart_Rec_2MCU(); OLED_ShowNum(0,0,(int)(Rec_data1*100),5,16); OLED_ShowNum(0,3,(int)(Rec_data2*100),5,16); OLED_ShowString(20,6,"2020/04/09"); printf("STM32圆形遥控器\n"); } } ``` #### 用USB转TTL工具连接电脑或者直接使用蓝牙,本次测试未使用蓝牙:
#### 这时串口调试助手上一直打印字符串:
#### 借助串口调试助手向单片机发送数据;
#### 显示屏显示,未发送数据时为0:
#### 接收到数据时:
#### 工程文件如下: ####
4、stm32圆形遥控器_串口测试.rar
(5.21 MB)
(下载次数: 24, 2020-4-9 14:23 上传)
点赞
回复评论 (5)
沙发
dcexpert
感谢分享
点赞
2020-4-9 15:08
板凳
pcf2000
有NRF24L01无线收发模块的例代码吗?
点赞
2020-4-9 17:15
4楼
bqgup
引用:
pcf2000 发表于 2020-4-9 17:15
有NRF24L01无线收发模块的例代码吗?
有,快更新了
点赞
2020-4-10 08:21
5楼
okhxyyo
赞~这个真不错!
点赞
2020-4-10 09:02
6楼
juanfeng2013
这个遥控距离能达到多少。
点赞
2020-7-31 15:40
最新活动
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
随便看看
lis35de重力加速度问题
句句经典,总有一句适合你
征集 TI Stellaris 疑难杂症
程序烧写进FLASH后,无法进入中断
如何学习51单片机的自我理解
SDRAM串口实验之依样画葫芦(verilog)
PFC的设计二(不管是用UCC28070 还是采用C2000都能行)
最便宜的(按零售)带USB的STM32是哪款?
什么是共集、共基、共射放大器?让我们来看看...
【新思科技IP资源】市场对 SoC 中专用人工智能 IP 的需求日益增加
wince5.0 动鼠标屏闪的问题?
图片旋转后缩放的问题。。。
STM32的12864的程序怎么写?自己写的不能显示
【R7F0C809】02 中断系统简介
STM8S105C6
14年电赛刚出的电源类题目,大家来讨论下
随便聊聊……
赢话费——“工程师创新能力调查” 期待您的参与!
急求430FG4619中关于OA的资料
【晒样片】+支持 BLE 连接的光学心率监视器参考设计
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复