|
以前使用Proteus仿真STM32時就因為內部時鐘頻率不對導致仿真遇到各種問題,網上教程雜亂且似乎無效,就很頭疼,請大佬解答關于Proteus仿真stm32時鐘的問題。
今天再次使用Proteus仿真STM32C8超聲波測距,使用Proteus8.13仿真,庫函數編寫。
1.png (52.5 KB, 下載次數: 50)
下載附件
2023-4-21 21:04 上傳
LCD能夠正常使用,但PWMI模式輸入捕獲部分始終有問題。于是我打算產生一個穩定的PWM,再用捕獲引腳測試。我還用了標準的方波進行參照,發現PWM比方波小100倍,Proteus使用時鐘為8M。
2.png (12.46 KB, 下載次數: 52)
下載附件
2023-4-21 21:04 上傳
PWM波單片機代碼如下
- void PWM_Init()
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- GPIO_InitTypeDef GPIO_InitStruct;
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
- GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStruct);
- TIM_InternalClockConfig(TIM1); // 開啟內部時鐘
- // 初始化TIM3的時基單元
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
- TIM_TimeBaseStructInit(&TIM_TimeBaseInitStruct);
- TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; // 濾波的分頻值
- TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInitStruct.TIM_Period = 100 - 1;
- TIM_TimeBaseInitStruct.TIM_Prescaler = 7200 - 1;//產生10KHz
- TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; // 高級定時器才用
- TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct);
- TIM_OCInitTypeDef TIM_OCInitStruct;
- TIM_OCStructInit(&TIM_OCInitStruct);
- TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
- TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
- TIM_OCInitStruct.TIM_Pulse = 50;
- TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
- TIM_OC1Init(TIM1, &TIM_OCInitStruct);
- TIM_Cmd(TIM1, ENABLE);
- TIM_CtrlPWMOutputs(TIM1, ENABLE);
- }
復制代碼
|
|