在STM32上生成不同频率的脉冲序列

2019-07-14 18:00发布

我在使用计时器生成脉冲序列时,想在Keil微视觉5中改变代码中的频率:
  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */
  4.   uint16_t Prescaler=1;
  5.   /* USER CODE END 1 */

  6.   /* MCU Configuration----------------------------------------------------------*/

  7.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  8.   HAL_Init();

  9.   /* USER CODE BEGIN Init */

  10.   /* USER CODE END Init */

  11.   /* Configure the system clock */
  12.   SystemClock_Config();

  13.   /* USER CODE BEGIN SysInit */

  14.   /* USER CODE END SysInit */

  15.   /* Initialize all configured peripherals */
  16.   MX_GPIO_Init();
  17.   MX_USART2_UART_Init();
  18.   MX_TIM1_Init();
  19.   /* USER CODE BEGIN 2 */
  20.   HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
  21.   /* USER CODE END 2 */

  22.   /* Infinite loop */
  23.   /* USER CODE BEGIN WHILE */
  24.   while (1)
  25.   {
  26.     htim1.Instance->PSC = Prescaler;
  27.     Prescaler+=1;
  28.     if(Prescaler>80) Prescaler=1;
  29.     HAL_Delay(500);
  30.   /* USER CODE END WHILE */

  31.   /* USER CODE BEGIN 3 */

  32.   }
  33.   /* USER CODE END 3 */

  34. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
juanll5
1楼-- · 2019-07-15 00:33
我在这里看到没有问题
hucc
2楼-- · 2019-07-15 04:09
我正在使用的是STM32L476RG,内部时钟为80MHz我运行了代码并在示波器上进行了检查。它提供了一个频率脉冲序列。
wrfqwerty
3楼-- · 2019-07-15 05:40
“ Prescaler”只是一个struct(驻留在RAM中)的成员,它保存外设的配置,而不是真正的SFR或SFR的位。
要更改设置,你必须HAL_TIM_Base_Init()每次都产生频率。或者,你可以直接修改寄存器以节省执行上述功能的时间。

一周热门 更多>