[Keyboard] Added support for ErgoDox with STM32 Microcontroller (#5398)
* Began Work On STM32 Ergodox Changes to be committed: new file: keyboards/ergodox_stm32/config.h new file: keyboards/ergodox_stm32/rules.mk * test * Now it compile. Not linking thou * Screw this Linker. It links now! * Blinkly Keyboard * bootloader test code * Working on matrix / i2c stuff * Progress (LED Blink) * Progress on MCP_23017 Status Flag * [WIP] * update * Works! Remeber to change back the bootloader address when the new bootloadrer is ready. * Time to go debug the i2c * Finally, it now works with PCB Rev 1.0.2 * updated for rev.2 pcb * minor compilation fix * Why when debugger is enabled then everything works. * Remeber to call init functions. * Update arm i2c driver to support STM32F103 series device. * fix include once header. Replaced with #pragma once. * complication test
This commit is contained in:
		
							parent
							
								
									eac4ce972d
								
							
						
					
					
						commit
						c61d7d7cb0
					
				
					 15 changed files with 1983 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -32,6 +32,17 @@
 | 
			
		|||
 | 
			
		||||
static uint8_t i2c_address;
 | 
			
		||||
 | 
			
		||||
// ChibiOS uses two initialization structure for v1 and v2/v3 i2c APIs.
 | 
			
		||||
// The F1 series uses the v1 api, which have to initialized this way.
 | 
			
		||||
#ifdef STM32F103xB
 | 
			
		||||
static const I2CConfig i2cconfig = {
 | 
			
		||||
  OPMODE_I2C,
 | 
			
		||||
  400000,
 | 
			
		||||
  FAST_DUTY_CYCLE_2,
 | 
			
		||||
};
 | 
			
		||||
#else
 | 
			
		||||
// This configures the I2C clock to 400khz assuming a 72Mhz clock
 | 
			
		||||
// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
 | 
			
		||||
static const I2CConfig i2cconfig = {
 | 
			
		||||
#ifdef USE_I2CV1
 | 
			
		||||
    I2C1_OPMODE,
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +52,7 @@ static const I2CConfig i2cconfig = {
 | 
			
		|||
    STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) | STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) | STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL), 0, 0
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static i2c_status_t chibios_to_qmk(const msg_t* status) {
 | 
			
		||||
    switch (*status) {
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +72,6 @@ __attribute__((weak)) void i2c_init(void) {
 | 
			
		|||
    palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_INPUT);
 | 
			
		||||
 | 
			
		||||
    chThdSleepMilliseconds(10);
 | 
			
		||||
 | 
			
		||||
#ifdef USE_I2CV1
 | 
			
		||||
    palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
 | 
			
		||||
    palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
 | 
			
		||||
| 
						 | 
				
			
			@ -68,8 +79,6 @@ __attribute__((weak)) void i2c_init(void) {
 | 
			
		|||
    palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
 | 
			
		||||
    palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    // i2cInit(); //This is invoked by halInit() so no need to redo it.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
i2c_status_t i2c_start(uint8_t address) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue