总线结构

cubemx给i2c生成了一个句柄 hi2c1
c
uint8_t commands[] = {
0x00,// oled写命令
0xAE, // 关闭屏幕
0x8d,0x14,//使用电荷泵
0xAF,// 打开屏幕
};
/**
* HAL_OK : 成功
* HAL_ERROR : 发送出错
* HAL_BUSY : i2c接口忙
* HAL_TIMEOUT : 发送超时
*
*/
HAL_I2C_Master_Transmit(&hi2c1,0x78,commands,sizeof(commands)/sizeof(commands[0]),HAL_MAX_DELAY);
uint8_t dataRcvd;
HAL_I2C_Master_Receive(&hi2c1,0x78,&dataRcvd,1,HAL_MAX_DELAY);
if ((dataRcvd & (0x01 << 6)) == 0) {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
}else {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
}




USART代码
c
/**
*HAL_OK : 成功
*HAL_ERROR : 失败
*HAL_BUSY : 串口忙
*HAL_TIMEOUT : 超时
*
*/
uint8_t byteNumber = 0x5a;
char *str = "hello world";
// int8_t
HAL_UART_Transmit(&huart1,&byteNumber,1,HAL_MAX_DELAY);
HAL_UART_Transmit(&huart1,(uint8_t*)str,strlen(str),HAL_MAX_DELAY);
c
uint8_t receive;
HAL_UART_Receive(&huart1,&receive,1,HAL_MAX_DELAY);
if (receive == '0') {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
}else {
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
}
串口中断

weak表示可以被覆盖,,,
c
// 收5次中断,,这五个中断都执行完了的话,,,会执行最终的回调函数
// 中断是hal自己完成的,,我们只需要关注完成之后的那个函数
HAL_UART_Receive_IT(&huart1,&receiveData,1);
每次接收一个,,进入中断后再启动下一次的中断
c
/**
*串口中断完成进入函数
* @param huart 哪一个串口句柄
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if (huart == &huart1) {
if (receiveData == '1') {
blinkTime = 1000;
}else if (receiveData == '2') {
blinkTime = 400;
}else if (receiveData == '3') {
blinkTime = 200;
}
HAL_UART_Receive_IT(&huart1,&receiveData,1);
}
}






实际寄存器
影子寄存器
