1 /*
2 * Copyright (c) 2006-2022, RT-Thread Development Team
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Change Logs:
7 * Date Author Notes
8 * 2020-08-20 Abbcc 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_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOA);
19 RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_USART1);
20
21 GPIO_ConfigStruct.mode = GPIO_MODE_AF;
22 GPIO_ConfigStruct.pin = GPIO_PIN_9;
23 GPIO_ConfigStruct.otype = GPIO_OTYPE_PP;
24 GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
25 GPIO_Config(GPIOA, &GPIO_ConfigStruct);
26 GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_9, GPIO_AF_USART1);
27
28 GPIO_ConfigStruct.mode = GPIO_MODE_AF;
29 GPIO_ConfigStruct.pin = GPIO_PIN_10;
30 GPIO_ConfigStruct.pupd = GPIO_PUPD_UP;
31 GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
32 GPIO_Config(GPIOA, &GPIO_ConfigStruct);
33 GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_10, GPIO_AF_USART1);
34 #endif
35
36 #ifdef BSP_USING_UART2
37 RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOA);
38 RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_USART2);
39
40 GPIO_ConfigStruct.mode = GPIO_MODE_AF;
41 GPIO_ConfigStruct.pin = GPIO_PIN_2;
42 GPIO_ConfigStruct.otype = GPIO_OTYPE_PP;
43 GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
44 GPIO_Config(GPIOA, &GPIO_ConfigStruct);
45 GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_2, GPIO_AF_USART2);
46
47 GPIO_ConfigStruct.mode = GPIO_MODE_AF;
48 GPIO_ConfigStruct.pin = GPIO_PIN_3;
49 GPIO_ConfigStruct.pupd = GPIO_PUPD_UP;
50 GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
51 GPIO_Config(GPIOA, &GPIO_ConfigStruct);
52 GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_3, GPIO_AF_USART2);
53 #endif
54 }
55
apm32_msp_can_init(void * Instance)56 void apm32_msp_can_init(void *Instance)
57 {
58 #if defined(BSP_USING_CAN1) || defined(BSP_USING_CAN2)
59 GPIO_Config_T GPIO_InitStructure;
60 CAN_T *CANx = (CAN_T *)Instance;
61
62 if (CAN1 == CANx)
63 {
64 RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_CAN1);
65
66 RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOB);
67
68 /* PB8: CAN1_RX, PB9: CAN1_TX */
69 GPIO_InitStructure.pin = GPIO_PIN_8 | GPIO_PIN_9;
70 GPIO_InitStructure.mode = GPIO_MODE_AF;
71 GPIO_InitStructure.otype = GPIO_OTYPE_PP;
72 GPIO_InitStructure.speed = GPIO_SPEED_100MHz;
73 GPIO_InitStructure.pupd = GPIO_PUPD_UP;
74 GPIO_Config(GPIOB, &GPIO_InitStructure);
75
76 GPIO_ConfigPinAF(GPIOB, GPIO_PIN_SOURCE_8, GPIO_AF_CAN1);
77 GPIO_ConfigPinAF(GPIOB, GPIO_PIN_SOURCE_9, GPIO_AF_CAN1);
78 }
79 else if (CAN2 == CANx)
80 {
81 /* When using the CAN2 peripheral, the CAN1 clock must be turned on */
82 RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_CAN1);
83 RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_CAN2);
84
85 RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOB);
86
87 /* PB12: CAN2_RX, PB13: CAN2_TX */
88 GPIO_InitStructure.pin = GPIO_PIN_12 | GPIO_PIN_13;
89 GPIO_InitStructure.mode = GPIO_MODE_AF;
90 GPIO_InitStructure.otype = GPIO_OTYPE_PP;
91 GPIO_InitStructure.speed = GPIO_SPEED_100MHz;
92 GPIO_InitStructure.pupd = GPIO_PUPD_UP;
93 GPIO_Config(GPIOB, &GPIO_InitStructure);
94
95 GPIO_ConfigPinAF(GPIOB, GPIO_PIN_SOURCE_12, GPIO_AF_CAN2);
96 GPIO_ConfigPinAF(GPIOB, GPIO_PIN_SOURCE_13, GPIO_AF_CAN2);
97 }
98 #endif
99 }
100