Vit (20.05.2014 21:15, просмотров: 110) ответил 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)
битовые операции можно по желанию заменить на битбанг