You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.8 KiB

4 years ago
  1. #include "timer.h"
  2. #define FREQUENCY 48000
  3. uint32_t g_frequency = FREQUENCY;
  4. uint32_t g_duty[4] = {0, FREQUENCY / 4, FREQUENCY / 2,
  5. FREQUENCY - 1}; //Ŀǰ����������λ��25%��50%��100%��
  6. void t16_pinA4_init(void) {
  7. GPIO_InitSettingType x;
  8. x.Signal = GPIO_Pin_Signal_Digital; //����
  9. x.Dir = GPIO_Direction_Output; //����ģʽ
  10. x.Func = GPIO_Reuse_Func2; //���õ�T16N0_1����
  11. x.ODE = GPIO_ODE_Output_Disable; //��©ʹ��
  12. x.DS = GPIO_DS_Output_Normal; //��ͨ����ģʽ
  13. x.PUE = GPIO_PUE_Input_Enable; //������ʹ��
  14. x.PDE = GPIO_PDE_Input_Disable; //��������ֹ
  15. /* ����PA4ΪT16N0����ͨ��1 */
  16. GPIO_Init(GPIO_Pin_A4, &x);
  17. }
  18. void t16n0_1_init(void) {
  19. // PA4 T16N0_1
  20. T16Nx_BaseInitStruType x;
  21. T16Nx_PWMInitStruType y;
  22. /* ��ʼ��T16Nx��ʱ��*/
  23. x.T16Nx_ClkS = T16Nx_ClkS_PCLK; //ʱ��Դ48M
  24. x.T16Nx_SYNC = Disable; //��ͬ��
  25. x.T16Nx_EDGE = T16Nx_EDGE_Rise; //�����ش���
  26. x.T16Nx_Mode = T16Nx_Mode_PWM; // ѡ��PWMģʽ
  27. x.T16Nx_PREMAT = 0x01; /* Ԥ��Ƶ��1:1 */
  28. T16Nx_BaseInit(T16N0, &x);
  29. /* ����T16N0ͨ��1���� */
  30. y.T16Nx_MOE0 = Disable;
  31. y.T16Nx_MOE1 = Enable;
  32. y.T16Nx_POL0 =
  33. POSITIVE; //�ڴ��ڷ��͵�ʱ���������Դ������͵����������ܵ�������ͬ�������Դ����뷢�͵������෴������ô��֪����û������
  34. y.T16Nx_POL1 = POSITIVE;
  35. y.T16Nx_PWMMODE = T16Nx_PWMMode_INDEP; //ѡ������ģʽ
  36. y.PWMDZE = Disable; // PWM����ģʽ����ʹ��
  37. y.REGBUFEN = Enable; //�����Ĵ���ʹ�� (REGBUFENĿǰ��֪����ʲô�õ�)
  38. T16Nx_PMWOutInit(T16N0, &y);
  39. /* ����T16N0 ͨ��1���� */
  40. /*MAT2 MAT3 ͨ�����ж�����*/
  41. //ƥ���Ĵ���ֵƥ�����Ĺ���ģʽ���������Ժ��� ���������������ж�
  42. T16Nx_MAT2ITConfig(T16N0, T16Nx_Go_No);
  43. //ƥ���Ĵ���ֵƥ�����Ĺ���ģʽ,���㲢���¼����������ж�
  44. T16Nx_MAT3ITConfig(T16N0, T16Nx_Clr_Int);
  45. /*MAT2 MAT3 ƥ������������ƽ�ߵ�*/
  46. T16Nx_MAT2Out1Config(T16N0,
  47. T16Nx_Out_High); //ƥ���������˿ڵ�ģʽ�������߻��ǵ�
  48. T16Nx_MAT3Out1Config(T16N0,
  49. T16Nx_Out_Low); //ƥ���������˿ڵ�ģʽ�������߻��ǵ�
  50. //����������ģʽ�������ߵ͵�ƽ
  51. T16Nx_SetCNT1(T16N0, 0); //�趨�������ij�ʼֵ
  52. T16Nx_SetMAT2(T16N0, g_duty[0]); //����ƥ���Ĵ�������ֵ
  53. uint32_t duty = g_frequency;
  54. T16Nx_SetMAT3(T16N0, duty); //����ƥ���Ĵ�������ֵ
  55. //���ü�������ֵ//���������õ���ʱ��ʱ��48M/48000=1khZ(�ڶ���ģʽ��PWM��������TOP1����ΪTOP+1��������������1ms)
  56. T16Nx_SetTOP1(T16N0, g_frequency);
  57. //����������ռ�ձ�
  58. /* ���������ܽ� */
  59. t16_pinA4_init();
  60. T16Nx_Enable(T16N0);
  61. return;
  62. }
  63. void set_pwm_frequency_duty(uint32_t frequency, uint32_t duty) {
  64. T16Nx_Disable(T16N0);
  65. t16n0_1_init();
  66. T16Nx_SetMAT2(T16N0, duty);
  67. duty = g_frequency;
  68. T16Nx_SetMAT3(T16N0, duty);
  69. T16Nx_SetTOP1(T16N0, frequency);
  70. }