1 /*
2 * Copyright (c) 2006-2023, RT-Thread Development Team
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date Author Notes
8 * 2023-01-11 luobeihai first version
9 */
10
11 #include "board.h"
12
apm32_usart_init(void)13 void apm32_usart_init(void)
14 {
15 GPIO_Config_T GPIO_ConfigStruct;
16
17 #ifdef BSP_USING_UART1
18 RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOA);
19 RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_USART1);
20
21 /* Connect PXx to USARTx_Tx */
22 GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_9, GPIO_AF_PIN1);
23
24 /* Connect PXx to USARRX_Rx */
25 GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_10, GPIO_AF_PIN1);
26
27 /* Configure USART Tx/Rx as alternate function push-pull */
28 GPIO_ConfigStruct.mode = GPIO_MODE_AF;
29 GPIO_ConfigStruct.pin = GPIO_PIN_9;
30 GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
31 GPIO_ConfigStruct.outtype = GPIO_OUT_TYPE_PP;
32 GPIO_ConfigStruct.pupd = GPIO_PUPD_PU;
33 GPIO_Config(GPIOA, &GPIO_ConfigStruct);
34
35 GPIO_ConfigStruct.pin = GPIO_PIN_10;
36 GPIO_Config(GPIOA, &GPIO_ConfigStruct);
37 #endif
38
39 #ifdef BSP_USING_UART2
40 RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOA);
41 RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_USART2);
42
43 /* Connect PXx to USARTx_Tx */
44 GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_2, GPIO_AF_PIN1);
45
46 /* Connect PXx to USARRX_Rx */
47 GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_3, GPIO_AF_PIN1);
48
49 /* Configure USART Tx/Rx as alternate function push-pull */
50 GPIO_ConfigStruct.mode = GPIO_MODE_AF;
51 GPIO_ConfigStruct.pin = GPIO_PIN_2;
52 GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
53 GPIO_ConfigStruct.outtype = GPIO_OUT_TYPE_PP;
54 GPIO_ConfigStruct.pupd = GPIO_PUPD_PU;
55 GPIO_Config(GPIOA, &GPIO_ConfigStruct);
56
57 GPIO_ConfigStruct.pin = GPIO_PIN_3;
58 GPIO_Config(GPIOA, &GPIO_ConfigStruct);
59 #endif
60 }
61
apm32_msp_spi_init(void * Instance)62 void apm32_msp_spi_init(void *Instance)
63 {
64 #ifdef BSP_USING_SPI
65 GPIO_Config_T GPIO_InitStructure;
66 SPI_T *spi_x = (SPI_T *)Instance;
67
68 if(spi_x == SPI2)
69 {
70 /* Enable related Clock */
71 RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOB);
72 RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_SPI2);
73 RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_SYSCFG);
74
75 /* Config SPI PinAF */
76 GPIO_ConfigPinAF(GPIOB, GPIO_PIN_SOURCE_15, GPIO_AF_PIN0);
77 GPIO_ConfigPinAF(GPIOB, GPIO_PIN_SOURCE_14, GPIO_AF_PIN0);
78 GPIO_ConfigPinAF(GPIOB, GPIO_PIN_SOURCE_13, GPIO_AF_PIN0);
79
80 /* Config SPI GPIO*/
81 GPIO_ConfigStructInit(&GPIO_InitStructure);
82 GPIO_InitStructure.pin = GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
83 GPIO_InitStructure.speed = GPIO_SPEED_50MHz;
84 GPIO_InitStructure.mode = GPIO_MODE_AF;
85 GPIO_InitStructure.outtype = GPIO_OUT_TYPE_PP;
86 GPIO_InitStructure.pupd = GPIO_PUPD_NO;
87 GPIO_Config(GPIOB, &GPIO_InitStructure);
88 }
89 #endif
90 }
91
apm32_msp_timer_init(void * Instance)92 void apm32_msp_timer_init(void *Instance)
93 {
94 #ifdef BSP_USING_PWM
95 GPIO_Config_T gpio_config;
96 TMR_T *tmr_x = (TMR_T *)Instance;
97
98 if (tmr_x == TMR3)
99 {
100 RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR3);
101
102 /* TMR3 channel 1 gpio init */
103 GPIO_ConfigPinAF(GPIOC, GPIO_PIN_SOURCE_6, GPIO_AF_PIN0);
104 gpio_config.pin = GPIO_PIN_6;
105 gpio_config.mode = GPIO_MODE_AF;
106 gpio_config.outtype = GPIO_OUT_TYPE_PP;
107 gpio_config.pupd = GPIO_PUPD_NO;
108 gpio_config.speed = GPIO_SPEED_50MHz;
109 GPIO_Config(GPIOC, &gpio_config);
110
111 /* TMR3 channel 2 gpio init */
112 GPIO_ConfigPinAF(GPIOC, GPIO_PIN_SOURCE_7, GPIO_AF_PIN0);
113 gpio_config.pin = GPIO_PIN_7;
114 GPIO_Config(GPIOC, &gpio_config);
115
116 /* TMR3 channel 3 gpio init */
117 GPIO_ConfigPinAF(GPIOC, GPIO_PIN_SOURCE_8, GPIO_AF_PIN0);
118 gpio_config.pin = GPIO_PIN_8;
119 GPIO_Config(GPIOC, &gpio_config);
120
121 /* TMR3 channel 4 gpio init */
122 GPIO_ConfigPinAF(GPIOC, GPIO_PIN_SOURCE_9, GPIO_AF_PIN0);
123 gpio_config.pin = GPIO_PIN_9;
124 GPIO_Config(GPIOC, &gpio_config);
125 }
126 #endif
127 }
128