1 博客内容
博客内容基于STM32F103 RET6芯片,介绍PWM控制小车电机时同步进行PS2手柄SPI通讯读取数据。
2 主程序(Main.c)
参考平衡小车之家,通过是IO口模拟PS2的ISPI通信,获取手柄左右遥感X/Y数据。
//================================================
// 名称: Main.c
// 作者: Morven_X
// 版本: 1.1
// 编制: 2021/01/28 23:10
// 更新: ~~
// 功能: 基于STM32F103 RET6芯片,PWM输出的同时增加PS2手柄数据读取
// 简介: ~~(Keil 5.28)
// Email: morven_xie@163.com
//================================================
# include "stm32f10x.h"
# include "LED1.h"
# include "Delay.h"
# include "PWM.h"
# include "SPI.h"
# include "VehCtrl.h"
int PS2_LX,PS2_LY,PS2_RX,PS2_RY,PS2_KEY;
int main(void)
{
JTAG_Init();
Stm32_Clock_Init(9); //=====系统时钟设置
Delay_Init(); //=====延时初始化
LED_Init(); //===== LED 连接的硬件接口
uart_init(72,9600);
VehCtrl_MotorEn_Int();
Delay_ms(100);
Motor_EN();
PWM_TIM2_Init(); //TIM2_PWM输出初始化
PWM_TIM4_Init();
Delay_ms(1000); //=====延时等待初始化稳定
PS2_Init(); //=====ps2驱动端口初始化
PS2_SetInit(); //=====ps2配置初始化,配置“红绿灯模式”,并选择是否可以修改
GPIO_SetBits(GPIOC, GPIO_Pin_3); //设置LED高电平输出
Delay_ms(100);
GPIO_ResetBits(GPIOC, GPIO_Pin_3); //设置LED高电平输出
Delay_ms(100);
GPIO_SetBits(GPIOC, GPIO_Pin_3); //设置LED高电平输出
while(1)
{
TIM_SetCompare1(TIM2,800); //设置TIM2 CH1占空比输出 PA0
TIM_SetCompare2(TIM2,0); //设置TIM2 CH2占空比输出 PA1
TIM_SetCompare3(TIM2,1000); //设置TIM2 CH1占空比输出 PA2
TIM_SetCompare4(TIM2,0); //设置TIM2 CH2占空比输出 PA3
TIM_SetCompare1(TIM4,0); //设置TIM4 CH1占空比输出 PB6
TIM_SetCompare2(TIM4,1200); //设置TIM4 CH2占空比输出 PB7
TIM_SetCompare3(TIM4,0); //设置TIM4 CH3占空比输出 PB8
TIM_SetCompare4(TIM4,1500); //设置TIM4 CH4占空比输出 PB9
PS2_LX=PS2_AnologData(PSS_LX);
PS2_LY=PS2_AnologData(PSS_LY);
PS2_RX=PS2_AnologData(PSS_RX);
PS2_RY=PS2_AnologData(PSS_RY);
PS2_KEY=PS2_DataKey();
Delay_ms(20);
}
}
3 结果输出
小车车轮可以展示PWM输出控制,同时SPI通信数据如下: