ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
21 июля
516941 Топик полностью
Vit (20.05.2014 21:15, просмотров: 99) ответил Argon на Осваиваю standard peripheral library для stm32f2xx. Громоздко как-то. Обычным любительским способом не будет ли короче (через имена регистров)?
Для редко вызываемых настроечных функций не вижу смысла в ручных оптимизациях. А всякие по-проще - вполне заменяются макросами. Для узнаваемости и дабы не выдумывать велосипед использую префикс к именам функций из либы. #define iGPIO_ReadInputDataBit(GPIOx, GPIO_Pin) ((((GPIOx)->IDR & (GPIO_Pin)) != (uint32_t)Bit_RESET)?\ ((uint8_t)Bit_SET):\ ((uint8_t)Bit_RESET)) #define iGPIO_ReadInputData(GPIOx) ((uint16_t)(GPIOx)->IDR) #define iGPIO_ReadOutputDataBit(GPIOx, GPIO_Pin) ((((GPIOx)->ODR & (GPIO_Pin)) != (uint32_t)Bit_RESET)?\ ((uint8_t)Bit_SET):\ ((uint8_t)Bit_RESET)) #define iGPIO_ReadOutputData(GPIOx) ((uint16_t)(GPIOx)->ODR) #define iGPIO_SetBits(GPIOx, GPIO_Pin) do{(GPIOx)->BSRRL = (GPIO_Pin);}while(0) #define iGPIO_ResetBits(GPIOx, GPIO_Pin) do{(GPIOx)->BSRRH = (GPIO_Pin);}while(0) #define iGPIO_WriteBit(GPIOx, GPIO_Pin, BitVal) do{if((BitVal) != Bit_RESET) \ {(GPIOx)->BSRRL = (GPIO_Pin);} \ else{(GPIOx)->BSRRH = (GPIO_Pin);}\ }while(0) #define iGPIO_Write(GPIOx, PortVal) do{(GPIOx)->ODR = (PortVal);}while(0) #define iGPIO_ToggleBits(GPIOx, GPIO_Pin) do{(GPIOx)->ODR ^= (GPIO_Pin);}while(0) битовые операции можно по желанию заменить на битбанг