完善资料让更多小伙伴认识你,还能领取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的选项
2882 浏览 1 评论
3282 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1861 浏览 1 评论
3711 浏览 6 评论
6125 浏览 21 评论
对H747I-DISCO写程序时将CN2的st-link复用为usart1,再次烧录时无法检测到stlink怎么解决?
411浏览 2评论
STM32G474RE芯片只是串口发个数据就发烫严重是怎么回事?
510浏览 2评论
STM32处理增量式编码器Z信号如何判断中断是正转的还是反向转的?
334浏览 2评论
使用STM32F407VET6的USB2.0功能,发现ctl后芯片无数据返回,是什么原因可能导致的呢?
246浏览 2评论
用STM32G431开发工程,1.50版本的Package包文件无法输出项目工程
354浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-24 18:15 , Processed in 1.127298 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191