复用GPIOA_PO引脚 输出PMW计算公式

		RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	//复用GPIOA_PO引脚 输出PMW
	//复用GPIOA_PO引脚 输出PMW ,经过查引脚定义,PAO的复用功能有TIM2_CH1_ETR
	//TIM2_CH1 _ETR,意思是这个TIM2的CH1和ETR都复用到了这个位置

	GPIO_InitTypeDef  GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	//CK_PSC = 72M
	//CCR = TIM_OCInitStruct.TIM_Pulse
	//PWM频率Freq = CK_PSC/PSC+1/ARR=1  = 72M/
	//PWM占空比Duty = CCR/ARR+1
	//PWM分辨率Reso = 1/ARR+1
	
	
	//产生频率为1khz,占空比50% 分辨率1%PWM波形计算方法
	
	//1/ARR+1 = 1%; ARR+1=100
	//CCR/ARR+1 = 50% = CCR/100 = CCR = 50;
	//CK_PSC/PSC+1/ARR+1 = 1Khz = 72M/PSC+1/100 = 1000HZ = PSC =720
	

	//定时1s = 72M/(7200)/10000
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStruct.TIM_Period = 100-1; //arr
	TIM_TimeBaseInitStruct.TIM_Prescaler = 720-1; //psc
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
	
	TIM_OCInitTypeDef  TIM_OCInitStruct;
	TIM_OCStructInit(&TIM_OCInitStruct);
	
	TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStruct.TIM_OCNPolarity = TIM_OCNPolarity_High;
	TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStruct.TIM_Pulse = 50; //CCR
	
	TIM_OC1Init(TIM2, &TIM_OCInitStruct);//ch1通道pwm

	TIM_Cmd(TIM2,ENABLE);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在STM32CubeMX中配置这些引脚输出模式。然后,在代码中使用以下代码初始化LCD: ```c // 定义引脚号 #define PIN_A0 GPIO_PIN_8 #define PIN_WR GPIO_PIN_9 #define PIN_RD GPIO_PIN_10 #define PIN_CS GPIO_PIN_11 #define PIN_DB0 GPIO_PIN_0 #define PIN_DB1 GPIO_PIN_1 #define PIN_DB2 GPIO_PIN_2 #define PIN_DB3 GPIO_PIN_3 #define PIN_DB4 GPIO_PIN_4 #define PIN_DB5 GPIO_PIN_5 #define PIN_DB6 GPIO_PIN_6 #define PIN_DB7 GPIO_PIN_7 // 初始化LCD void LCD_Init(void) { // 设置引脚输出模式 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = PIN_A0 | PIN_WR | PIN_RD | PIN_CS | PIN_DB0 | PIN_DB1 | PIN_DB2 | PIN_DB3 | PIN_DB4 | PIN_DB5 | PIN_DB6 | PIN_DB7; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化时序 HAL_GPIO_WritePin(GPIOA, PIN_CS, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA, PIN_WR, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA, PIN_RD, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA, PIN_A0, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA, PIN_DB0 | PIN_DB1 | PIN_DB2 | PIN_DB3 | PIN_DB4 | PIN_DB5 | PIN_DB6 | PIN_DB7, GPIO_PIN_RESET); // 进入复位状态 HAL_GPIO_WritePin(GPIOA, PIN_CS, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, PIN_WR, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA, PIN_RD, GPIO_PIN_SET); HAL_Delay(5); HAL_GPIO_WritePin(GPIOA, PIN_A0, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, PIN_WR, GPIO_PIN_RESET); HAL_Delay(5); HAL_GPIO_WritePin(GPIOA, PIN_WR, GPIO_PIN_SET); HAL_Delay(5); // 初始化寄存器 LCD_WriteCommand(0x3F); LCD_WriteCommand(0xC0); LCD_WriteCommand(0xB8); LCD_WriteCommand(0x40); LCD_WriteCommand(0xF3); LCD_WriteCommand(0x80); // 退出复位状态 HAL_GPIO_WritePin(GPIOA, PIN_CS, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOA, PIN_A0, GPIO_PIN_SET); } // 写入命令 void LCD_WriteCommand(uint8_t command) { HAL_GPIO_WritePin(GPIOA, PIN_A0, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, PIN_WR, GPIO_PIN_RESET); LCD_WriteData(command); HAL_GPIO_WritePin(GPIOA, PIN_WR, GPIO_PIN_SET); } // 写入数据 void LCD_WriteData(uint8_t data) { HAL_GPIO_WritePin(GPIOA, PIN_DB0, (data & 0x01) ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, PIN_DB1, (data & 0x02) ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, PIN_DB2, (data & 0x04) ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, PIN_DB3, (data & 0x08) ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, PIN_DB4, (data & 0x10) ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, PIN_DB5, (data & 0x20) ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, PIN_DB6, (data & 0x40) ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, PIN_DB7, (data & 0x80) ? GPIO_PIN_SET : GPIO_PIN_RESET); } ``` 这里的初始化时序和初始化寄存器命令是根据LCD的型号确定的,需要根据实际情况进行修改。具体的命令可以参考LCD的数据手册。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值