板子:STM32F103C8
模擬軟體:Proteus 8
軟體平臺:cubemx+keil
1 新建STM32CubeMX工程
1.1 配置系統時鐘RCC
1.2 配置定時器
這裡用的PB3和PA15一對
在TIM2
中,時鐘源選擇內部時鐘Internal Clock
,通道1選擇PWM輸出PWM Generation CH1 通道2選擇PWM輸出
PWM Generation CH2
2 程式碼
2.1 定義變數
uint16_t pulse=0; /*佔空比,重灌載值設定為999*/
uint8_t flag=1; /*LED標誌位,用於判斷是漸亮還是漸滅*/
2.2 mian函式
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
//啟動定時器2通道1的PWM
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
//啟動定時器2通道2的PWM
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
uint16_t pulse=0; /*佔空比,重灌載值設定為999*/
uint8_t flag=1; /*LED標誌位,用於判斷是漸亮還是漸滅*/
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
這裡下面是while 沒複製 就複製到這
while中程式碼編寫
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if (flag==1) /*執行LED漸亮*/
{
if (pulse<1000)
{
pulse+=50; /*佔空比增大*/
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,pulse); /*修改佔空比*/
HAL_Delay(100);
}
else
flag=0; /*切換為漸滅模式*/
}
else /*執行LED漸滅*/
{
pulse-=50; /*佔空比減小*/
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,pulse); /*修改佔空比*/
HAL_Delay(100);
if (pulse==0)
{
flag=1; /*切換為漸亮模式*/
}
}
}
完事