完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我创建了一些枚举和结构来声明特定的引脚设置。在 .h 文件中,我创建了这些结构和枚举:
typedef 枚举 { ePin_Led_Stat=0, ePin_Led_GPS_Fix, ePin_USART1_Tx, ePin_USART1_Rx, ePin_USART2_Tx, ePin_USART2_Rx, ePin_Name_Last } ePin_Name; 类型定义结构{ uint32_t 端口; uint32_t 引脚; uint32_t 模式; uint32_t 速度; uint32_t 输出类型; uint32_t 拉; uint32_t 备用; uint32_t 波特率; uint32_t 数据宽度; uint32_t 停止位; uint32_t 奇偶校验; uint32_t 传输方向; uint32_t 硬件流控制; uint32_t 过采样; } s_GPIO_Init_t; 然后在 .C 文件中我写了这段代码: s_GPIO_Init_t pin_name[] = { [ePin_Led_Stat] = {GPIOB, LL_GPIO_PIN_5, LL_GPIO_MODE_OUTPUT, LL_GPIO_SPEED_FREQ_LOW, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_NO, 0, 0, 0, 0, 0, 0, 0, 0}, [ePin_Led_GPS_Fix] = {GPIOB, LL_GPIO_PIN_4, LL_GPIO_MODE_OUTPUT, LL_GPIO_SPEED_FREQ_LOW, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_NO, 0, 0, 0, 0, 0, 0, 0, 0}, [ePin_USART1_Tx] = {GPIOB, LL_GPIO_PIN_6, LL_GPIO_MODE_ALTERNATE, LL_GPIO_SPEED_FREQ_VERY_HIGH, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_NO, LL_GPIO_AF_7, 115200, LL_USART_DATAWIDTH_8B, LL_USART_STOPBITS_1, LL_USART_PARITY_NONE, LL_USART_DIRECtiON_TX_RX, LL_USART_HWCONTROL_NONE, LL_USART_OVERSAMPLING_16}, [ePin_USART1_Rx] = {GPIOB, LL_GPIO_PIN_7, LL_GPIO_MODE_ALTERNATE, LL_GPIO_SPEED_FREQ_VERY_HIGH, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_NO, LL_GPIO_AF_7, 115200, LL_USART_DATAWIDTH_8B, LL_USART_STOPBITS_1, LL_USART_PARITY_NONE, LL_USART_DIRECTION_TX_RX, LL_USART_HWCONTROL_NONE, LL_USART_OVERSAMPLING_16}, [ePin_USART2_Tx] = {GPIOD, LL_GPIO_PIN_5, LL_GPIO_MODE_ALTERNATE, LL_GPIO_SPEED_FREQ_VERY_HIGH, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_NO, LL_GPIO_AF_7, 115200, LL_USART_DATAWIDTH_8B, LL_USART_STOPBITS_1, LL_USART_PARITY_NONE, LL_USART_DIRECTION_TX_RX, LL_USART_HWCONTROL_NONE, LL_USART_OVERSAMPLING_16}, [ePin_USART2_Rx] = {GPIOD, LL_GPIO_PIN_6, LL_GPIO_MODE_ALTERNATE, LL_GPIO_SPEED_FREQ_VERY_HIGH, LL_GPIO_OUTPUT_PUSHPULL, LL_GPIO_PULL_NO, LL_GPIO_AF_7, 115200, LL_USART_DATAWIDTH_8B, LL_USART_STOPBITS_1, LL_USART_PARITY_NONE, LL_USART_DIRECTION_TX_RX, LL_USART_HWCONTROL_NONE, LL_USART_OVERSAMPLING_16} }; void GPIO_Init (ePin_Name Pin) { LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; LL_USART_InitTypeDef USART_InitStruct = {0}; LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA); LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB); LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOD); GPIO_InitStruct.Pin = pin_name[Pin].pin; GPIO_InitStruct.Mode = pin_name[Pin].mode; GPIO_InitStruct.Speed = pin_name[Pin].speed; GPIO_InitStruct.OutputType = pin_name[Pin].output_type; GPIO_InitStruct.Pull = pin_name[Pin].pull; GPIO_InitStruct.Alternate = pin_name[Pin].alternate; LL_GPIO_Init(pin_name[Pin].port, &GPIO_InitStruct); 如果(pin_name[Pin].alternate == LL_GPIO_AF_7){ USART_InitStruct.BaudRate = pin_name[Pin].baudRate; USART_InitStruct.DataWidth = pin_name[Pin].dataWidth; USART_InitStruct.StopBits = pin_name[Pin].stopBits; USART_InitStruct.Parity = pin_name[Pin].parity; USART_InitStruct.TransferDirection = pin_name[Pin].transferDirection; USART_InitStruct.HardwareFlowControl = pin_name[Pin].hardwareFlowControl; USART_InitStruct.OverSampling = pin_name[Pin].overSampling; 如果(引脚 == 2 || 引脚 == 3){ LL_USART_Init(USART1, &USART_InitStruct); LL_USART_ConfigAsyncMode(USART1); LL_USART_Enable(USART1); } 别的 { LL_USART_Init(USART1, &USART_InitStruct); LL_USART_ConfigAsyncMode(USART1); LL_USART_Enable(USART1); } } } void GPIO_Set (ePin_Led led_pin) { LL_GPIO_SetOutputPin(pin_name[led_pin].port, pin_name[led_pin].pin); } void GPIO_Reset (ePin_Led led_pin) { LL_GPIO_ResetOutputPin(pin_name[led_pin].port, pin_name[led_pin].pin); } void GPIO_Toggle (ePin_Led led_pin) { LL_GPIO_TogglePin(pin_name[led_pin].port, pin_name[led_pin].pin); } void GPIO_Read (ePin_Name Pin) { LL_GPIO_ReadInputPort(pin_name[Pin].port); } 据我了解警告,我正在尝试使用 pin_name[Pin].port 获取特定端口,但类型不正确。在尝试传递这种端口调用时,我还收到了所有函数的其他警告:传递“LL_GPIO_Init”的参数 1 使指针来自整数而不进行强制转换 [-Wint-conversion]。 任何想法如何在我的结构中声明端口来解决这个问题? |
|
相关推荐
1个回答
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
3019 浏览 1 评论
3333 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1915 浏览 1 评论
3774 浏览 6 评论
6198 浏览 21 评论
STM32H7打开DCache后,出现了串口接收信息为空的现象,是哪里出了问题?
81浏览 5评论
用NANO STM32F103RBT6的开发板烧录不了是哪里出了问题?
98浏览 5评论
120浏览 5评论
外部中断触发类型为双边沿触发,进入中断回调后有什么办法判断该边沿是上升沿还是下降沿?
84浏览 5评论
STM32L071CBT6低温环境下无法正常工作是什么原因引起的?
91浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-4-27 09:35 , Processed in 0.647607 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191